Django 中的“slug”是什么?

2025-01-07 08:44:00
admin
原创
123
摘要:问题描述:当我阅读 Django 代码时,我经常在模型中看到所谓的“slug”。我不太清楚这是什么,但我知道它与 URL 有关。这个 slug 东西应该如何使用以及何时使用?我已在下面的词汇表中读到其定义:Slug 某物的简短标签,仅包含字母、数字、下划线或连字符。它们通常用于 URL。例如,在典型的博客条...

问题描述:

当我阅读 Django 代码时,我经常在模型中看到所谓的“slug”。我不太清楚这是什么,但我知道它与 URL 有关。这个 slug 东西应该如何使用以及何时使用?

我已在下面的词汇表中读到其定义:

Slug

某物的简短标签,仅包含字母、数字、下划线或连字符。它们通常用于 URL。例如,在典型的博客条目 URL 中:

https://www.djangoproject.com/weblog/2008/apr/12/spring/最后一点(spring)是slug。


解决方案 1:

“slug” 是一种生成有效 URL 的方法,通常使用已获得的数据。例如,slug 使用文章的标题来生成 URL。我建议通过给定标题(或其他数据)的函数来生成 slug,而不是手动设置。

举个例子:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

现在我们假设我们有一个 Django 模型,例如:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

如何使用 URL 和有意义的名称引用此对象?例如,您可以使用 Article.id,因此 URL 如下所示:

www.example.com/article/23

或者,您可能希望像这样引用标题:

www.example.com/article/The 46 Year Old Virgin

由于空格在 URL 中无效,因此必须将其替换为%20,结果为:

www.example.com/article/The%2046%20Year%20Old%20Virgin

这两种尝试都没有得到非常有意义且易于阅读的 URL。下面这个更好:

www.example.com/article/the-46-year-old-virgin

在这个例子中,the-46-year-old-virgin是一个 slug:它是通过标题中的所有字母小写并用连字符替换空格来创建的-

另请参阅此网页的 URL 以了解另一个示例。

解决方案 2:

如果我可以提供一些历史背景:

“slug”一词与铸造金属有关,在本例中是铅,印刷字体就是用这种金属制成的。每份报纸的字体工厂都会定期重新熔化并在新的模具中重新铸造,因为经过多次印刷后字体就会磨损。像我这样的学徒就是在那里开始他们的职业生涯的,并一路走到了顶峰(现在不是了)。

排版员必须以倒排的方式排版文章的文本,并将首字母以某种方式堆叠。因此,在印刷时,字母在纸上是直的。所有排版员都可以像阅读印刷报纸一样快速地阅读镜像报纸。因此,很多懒散的人(如蜗牛)和慢速故事(最后要修复的故事)都在工作台上等待,仅通过首字母进行识别,大部分是整个标题,通常更易读。一些“热门”新闻在工作台上等待,以便在最后一次组装和最终印刷之前进行最后一刻的更正(晚报)。

Django 诞生于堪萨斯州 Lawrence 杂志社的办公室。那里可能还残留着一些印刷术语。来自法国的 Django 爱好者和友善的老懒汉。

解决方案 3:

“slug”一词源于报纸生产领域。

这是在制作过程中为故事起的非正式名称。当故事从专职记者(假设这些记者还存在?)传到编辑再到“印刷机”时,它就会被用这个名字引用,例如,“你修复了‘凯特和威廉’故事中的那些错误吗?”。

一些系统(例如 Django)使用 slug 作为 URL 的一部分来定位故事,例如www.mysite.com/archives/kate-and-william

甚至 Stack Overflow 本身也是这样做的,使用 GEB-ish (一种)自引用的https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201,尽管你可以用 替换 slug blahblah,它仍然会发现它没问题。

它可能甚至比这还要早,因为剧本在每个场景的开头都有“slug lines”,基本上为该场景设置背景(在哪里、什么时候等等)。它非常相似,因为它是接下来内容的摘要或序言。

在 Linotype 机器上,slug 是一行金属片,由单个字母形式创建。通过为整行制作单个 slug,这大大改进了旧的逐字符排版方式。

虽然以下内容纯属猜测,但 slug 的早期含义是指假币(必须以某种方式压制)。我可以设想,该用法将转变为印刷术语(因为必须使用原始字符压制 slug),然后从“金属片”定义转变为“故事摘要”定义。从那里开始,从正确的印刷到在线世界只有一步之遥。


(a)道格拉斯·霍夫施塔特 (Douglas Hofstadter ) 的《哥德尔·埃舍尔、巴赫》,我 (至少) 认为这是一部伟大的现代知识分子著作。你还应该看看他的另一部作品《元魔法主题》。

解决方案 4:

Slug 是一个报纸术语。Slug 是某物的简短标签,仅包含字母、数字、下划线或连字符。它们通常用于 URL。(如 Django 文档中所述)

Django 中的 slug 字段用于存储和生成动态创建的网页的有效URL 。

就像您在 Stack Overflow 上添加此问题的方式一样,生成了一个动态页面,当您在地址栏中看到您的问题标题时,空格被“-”代替。这正是 slug 字段的工作。

在此处输入图片描述

您输入的标题是这样的 -> Django 中的“slug”是什么?

将其存储到 slug 字段后,它就变成了“what-is-a-slug-in-django”(参见本页的 URL)

解决方案 5:

Slug 是针对特定内容的 URL 友好短标签。它仅包含字母、数字、下划线或连字符。Slug 通常与相应内容一起保存,并以 URL 字符串的形式传递。

Slug 可以使用 SlugField 创建

前任:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

如果你想使用 title 作为 slug,django 有一个简单的函数叫做slugify

from django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

如果需要唯一性,请添加unique=Trueslug 字段。

例如,从前面的例子来看:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

你懒得做 slug 处理吗?别担心,这个插件会帮到你。django
-autoslug

解决方案 6:

从这里。

“Slug” 是一个报纸术语,但它在这里的意思是 URL 的最后一部分。例如,标题为“关于 Django 的一点”的帖子将自动变为“bit-about-django”(当然,如果您不喜欢自动生成的 slug,您可以轻松更改它)。

解决方案 7:

它是 URL 的描述部分,可以使其更人性化,但不一定被 Web 服务器所需要 - 在Django 中的“slug”是什么?中,slug 是“in-django-what-is-a-slug”,但 slug 不用于确定所服务的页面(至少在本网站上)

解决方案 8:

还会在 django-admin 上自动添加 slug。在 ModelAdmin 中添加:

prepopulated_fields = {'slug': ('title', )}

就像这里:

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}

解决方案 9:

slug 是 URL 的一部分,它以易于阅读的形式标识网站上的特定页面。

例如,/building-your-1st-django-site

仅 Slug 包含:

  • 字母:az,AZ

  • 数字 :0-9

  • 下划线:_

  • 连字符 : -

解决方案 10:

蛞蝓

某事物的简短标签,仅包含字母、数字、下划线或连字符。它们通常用于 URL。例如,在典型的博客条目 URL 中:

https://www.djangoproject.com/weblog/2008/apr/12/spring/
最后一点(spring)是slug。

解决方案 11:

这是一种生成有效 URL 的方法,通常使用已经获得的数据。例如,使用文章的标题来生成 URL。

解决方案 12:

Django 中使用 Slug 来动态生成人性化/可读的 URL。例如,此页面的当前 URL 为:
Django 中的“slug”是什么?。

注意 URL 是如何根据实际问题进行 slugify 的(Django 中的 slug 是什么)

解决方案 13:

简而言之,slug 可以帮助我们摆脱那些看起来丑陋的 URL,例如在电子商务网站中使用有效 URL,而不是像我在 slug 的帮助下www.myecom.com/product/5432156那样直接显示URLwww.myecom.com/product/iphone11

解决方案 14:

除了其他答案之外,Google 搜索中心针对SEO的说法如下:

考虑使用连字符分隔 URL 中的单词,因为它可以帮助用户和搜索引擎更轻松地识别 URL 中的概念。我们建议您在 URL 中使用连字符 (-),而不是下划线 (_)。

因此,您应该使用-来分隔单词,slug如下所示:

http://example.com/blog/my-1st-blog
                      #   ↑   ↑ Use hyphens

而不是_像下面这样:

http://example.com/blog/my_1st_blog
                      #   ↑   ↑ Don't use underscores

此外,-用于分隔您的问题标题What is a "slug" in Django?slug如下所示:

https://stackoverflow.com/questions/427102/what-is-a-slug-in-django
                            # Hyphens are used ↑  ↑ ↑    ↑  ↑
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用