Django中的"slu"是什么?

Jon*_*nas 543 python django django-models slug

当我阅读Django代码时,我经常在模型中看到所谓的"slug".我不太确定这是什么,但我知道它与URL有关.怎么以及什么时候应该使用这个slug-thing?

(我在本词汇表中已经阅读了它的定义.)

Jos*_*ton 695

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

一个例子:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>
Run Code Online (Sandbox Code Playgroud)

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

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)
Run Code Online (Sandbox Code Playgroud)

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

www.example.com/article/23
Run Code Online (Sandbox Code Playgroud)

或者,您可以像这样引用标题:

www.example.com/article/The 46 Year Old Virgin
Run Code Online (Sandbox Code Playgroud)

问题是,空格在URL中无效,需要将其替换%20为丑陋的,使其如下所示:

www.example.com/article/The%2046%20Year%20Old%20Virgin
Run Code Online (Sandbox Code Playgroud)

这不是解决我们有意义的网址.这不会更好:

www.example.com/article/the-46-year-old-virgin
Run Code Online (Sandbox Code Playgroud)

这是一个slu .. the-46-year-old-virgin.所有字母都是向下的,空格用连字符代替-.有关示例,请参阅此网页的URL!

  • 我发现www.example.com/article/23/the-40-year-old-virgin更容易阅读. (114认同)
  • 好的描述,但要添加:SlugField不能确保开箱即用的独特性,因此如果默认使用它,这是一个更好的URL:www.example.com/article/the-40-year-old-virgin/23 /其中'23'是article.id,是实际用于查询的内容(也比查询slug更快). (60认同)
  • 您还可以向slug添加唯一约束. (19认同)
  • 如果您根据id提供内容,请确定是否检查slug与内容匹配(如果不匹配则返回404)或完全忽略它.我认为没有一个通用的规则,什么是最好的,SEO-wise.如果您在浏览器中输入http://stackoverflow.com/questions/427102/in-django-what-the-hell-is-a-slug,则仍会显示此页面. (14认同)
  • @Eno slug是为SEO和永久链接添加的.该ID用于索引查找.stackoverflow的SEO非常出色 - 他们正是使用这种策略.你的论点是"隐藏数据库ID",你现在已经把它变成了"SEO".怎么回事? (13认同)
  • @Daniel请记住,一个slug也隐藏了真正的数据库ID,因此你的例子击败了使用slug的一个优势. (2认同)
  • @Eno实际上完全不需要隐藏数据库ID-假定您所有的URL都是公开的。 (2认同)
  • 注意当前页面的 url,`/sf/ask/29897171/`,slug 是 `what-is-a-slug-in-django` (2认同)

小智 119

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

术语"slu""与铸造金属铅有关,在这种情况下,制造印刷机字体.然后每张纸都经常将其字体工厂重新熔化并在新模具中重铸,因为经过多次印刷后,它们变得陈旧.像我这样的学徒在那里开始他们的职业生涯,并一直走到顶峰(不再是).

印刷品必须以向后的方式组成文章的文本,其中铅字符以明智的方式堆叠.因此,在印刷时,字母将直接在纸上.所有的印刷品都可以读取与报纸一样快的镜报.因此,slu ,,(像蜗牛一样)慢的故事(最后要修复的)是很多在板凳上等待,完全由他们的拳头字母识别,大多数整个标题通常更具可读性.在最后一次组装和最终印刷之前,一些"热门"新闻在板凳上等待,可能是最后一分钟的修正(晚报).

Django出自堪萨斯州劳伦斯杂志的办公室.可能一些印刷术语仍然存在.A-Django的爱好者- & -友好-老鼻涕虫男孩来自法国.


pax*_*blo 56

作为一段历史,"slu"一词来自报纸编辑世界.

这是在制作过程中给出故事的非正式名称.随着故事蜿蜒曲折,从殴打记者到编辑再到"印刷机",这就是它所引用的名称,例如,"你在"俄罗斯 - 削减 - 欧洲 - 天然气"故事中修正了这些错误吗? ?".

Django使用它作为URL的一部分来定位故事,一个例子就是www.mysite.com/archives/russia-cuts-europe-gas.


Bob*_*toe 24

这里开始.

"Slug"是一个报纸术语,但这里的含义是URL的最后一点.例如,一个标题为"有点关于Django"的帖子会自动成为"bit-about-django"(当然,如果你不喜欢自动生成的slug,你可以轻松改变它).


Man*_*mar 24

Slug是一个报纸术语.slug是一个简短的标签,只包含字母,数字,下划线或连字符.它们通常用于URL.(如django docs)

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

就像你在Stack Overflow上添加这个问题的方式一样,生成一个动态页面,当你在地址栏中看到时,你会看到你的问题标题用" - "代替空格.这正是一个slu field领域的工作.

在此输入图像描述

你输入的标题是这样的 - > Django中的"slug"是什么?

&

将它存放到一个slug中,归结为什么是一个slug-in-django(参见本页的URL)


Ceb*_*yre 17

它是URL的描述性部分,使其更具人性化描述性,但不一定是Web服务器所必需的 - 在Django中的什么是"slug"?slu is是'in-django-what-a-a-slug',但slug不用于确定所服务页面(至少在这个网站上)


Sim*_*ans 17

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

Slug可以使用SlugField创建

例如:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

如果你想使用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)
Run Code Online (Sandbox Code Playgroud)

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

例如,从前面的例子:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)
Run Code Online (Sandbox Code Playgroud)

你是否懒得做slu process过程?别担心,这个插件会对你有所帮助. Django的autoslug


小智 9

也是django-admin的汽车slu .. 在ModelAdmin中添加:

prepopulated_fields = {'slug': ('title', )}
Run Code Online (Sandbox Code Playgroud)

在这里:

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

    prepopulated_fields = {'slug': ('title', )}
Run Code Online (Sandbox Code Playgroud)


小智 8

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

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

仅弹头包含:

  • 字母 : az,AZ
  • 数字:0-9
  • 下划线:_
  • 连字符 :-