ChatGPT解决这个技术问题 Extra ChatGPT

Django 中的“蛞蝓”是什么?

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

(我在 this glossary 中阅读了它的定义。)

要立即了解,请查看您所在网站的 URL:https://stackoverflow.com/questions/{id}/{slug}

n
normanius

“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 以获取另一个示例。


很好的描述,但要补充:SlugField 不能确保开箱即用的唯一性,所以如果默认使用它,这是一个更好的 URL:www.example.com/article/the-40-year-old-virgin/23 / 其中“23”是 article.id,是实际用于查询的内容(也比在 slug 上查询更快)。
我发现 www.example.com/article/23/the-40-year-old-virgin 更容易阅读。
如果您根据 id 提供内容,请决定是检查 slug 是否与内容匹配(如果不匹配则返回 404)或完全忽略它。我不认为有什么是最好的,搜索引擎优化的一般规则。如果您在浏览器中输入 stackoverflow.com/questions/427102/…,SO 仍会显示此页面。
@Eno 确实不需要隐藏数据库 ID - 假设您的所有 URL 无论如何都是公开的。
@Eno 为 SEO 和永久链接 nicey-ness 添加了 slug。 ID 用于索引查找。 stackoverflow 的 SEO 非常出色——他们正是使用这种策略。您的论点是“隐藏数据库 ID”,您现在已将其转为“SEO”。怎么回事?
P
Praveen

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

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

排版必须以向后的方式撰写文章的文本,并以明智的方式堆叠引导字符。所以在印刷时,这些字母会直接在纸上。所有的印刷版都可以像印刷版一样快速阅读镜像的报纸。因此,蛞蝓,(如蜗牛)和缓慢的故事(最后被修复)很多都在板凳上等待,仅通过他们的第一个字母来识别,主要是整个标题通常更易读。一些“热门”新闻在板凳上等着,可能在最后一分钟更正,(晚报)在最后一次组装和最终印刷之前。

姜戈从堪萨斯州劳伦斯杂志的办公室里出来。可能一些印刷术语仍然存在。来自法国的 django 爱好者和友好的老鼻涕虫男孩。


p
paxdiablo

“蛞蝓”一词来自报纸制作的世界。

这是在制作过程中给故事的非正式名称。随着故事从节拍记者(假设这些甚至不再存在?)到编辑再到“印刷机”,这是它所引用的名称,例如,“你修复了那些错误吗?凯特和威廉的故事?”。

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

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

它甚至可以追溯到更早的时候,因为剧本在每个场景的开头都有“slug line”,这基本上设置了那个场景的背景(地点、时间等)。它非常相似,因为它是以下内容的概要或序言。

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

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

(a) “哥德尔·埃舍尔,巴赫”,作者是一个Douglas Hofstadter,我(至少)认为这是伟大的现代智力作品之一。您还应该查看他的另一部作品“Metamagical Themas”。


dmid://uu457selfrefer1645699930
C
Community

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

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

就像您在 Stack Overflow 上添加此问题并生成动态页面一样,当您在地址栏中看到时,您会看到您的问题标题用“-”代替空格。这正是蛞蝓领域的工作。

https://i.stack.imgur.com/hUr5J.jpg

你输入的标题是这样的 -> Django 中的“slug”是什么?将其存储到 slug 字段中时,它变为“what-is-a-slug-in-django”(请参阅此页面的 URL)


A
AntoineLB

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

Slug 可以使用 SlugField 创建

前任:

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

如果你想使用标题作为 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)

如果需要唯一性,请在 slug 字段中添加 unique=True

例如,从前面的示例中:

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

你懒得做 slug 过程吗?别担心,这个插件会帮助你。 django-autoslug


可以使用 Django 扩展 AutoSlugField,在大多数情况下效果最好。
B
BobbyShaftoe

here

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


C
Community

它是 URL 的描述性部分,用于使其更具人性化描述性,但 Web 服务器不一定需要 - 在 What is a "slug" in Django? 中,slug 是“in-django-what-is-a-slug”,但slug 不用于确定 page served(至少在此站点上)


A
Aleksei Kuzmin

也可以在 django-admin 上进行自动 slug。在 ModelAdmin 中添加:

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

就像这里:

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

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

S
Sonia Rani

蛞蝓

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

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


S
Siva Sankar

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

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

仅蛞蝓包含:

字母 : az,AZ

数字:0-9

下划线:_

连字符:-


T
That dude

简而言之,slug 可以帮助摆脱那些带有有效网址的丑陋网址,例如电子商务网站中的示例,而不是将网址显示为 www.myecom.com/product/5432156,我可以在 slug 的帮助下将其显示为 www.myecom.com/product/iphone11


s
sailesh prajapati

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


o
obodoma uzondu vincent

Slug 在 Django 中用于动态生成人类友好/可读的 URL。例如,此页面的当前 URL 显示:What is a "slug" in Django?

请注意 URL 是如何与实际问题结合在一起的(Django 中的 slug 是什么)