关于python:Django中的“slug”是什么?

What is a “slug” in Django?

当我读到django代码时,我经常在模型中看到所谓的"slug"。我不太确定这是什么,但我知道它与URL有关。这个鼻涕虫是什么时候用的?

(我已经阅读了本术语表中的定义。)


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

一个例子:

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

现在假设我们有一个django模型,比如:

1
2
3
4
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就可以如下所示:

1
www.example.com/article/23

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

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

问题是,URL中的空格无效,需要用难看的%20替换,使其如下:

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

这并不能解决我们有意义的URL。这不是更好吗:

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

那是蛞蝓。the-46-year-old-virgin。所有字母都是小写,空格由连字符-替换。看看这个网页的网址就可以了!


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

术语"slug"与铸造金属铅有关,在这种情况下,印刷字体是由铸造金属铅制成的。每一张纸都有自己的字体工厂定期重新融化和重新铸造在新的模具,因为在许多印刷后,他们变得磨损。像我这样的学徒在那里开始了他们的职业生涯,一直走到了顶峰(不再是了)。

排字机必须以向后的方式编写文章的文本,并将前导字符按一定的顺序堆叠起来。所以在印刷的时候,字母会直接印在纸上。所有的打字员都能像印刷版一样快速地阅读报纸。因此,鼻涕虫(像蜗牛一样)和慢故事(最后一个固定下来的)都是坐在长凳上等待着的,它们的第一个字母仅仅是识别出来的,大部分是整个标题,通常更容易阅读。一些"热门"新闻在台上等待,等待可能的最后一分钟修正(晚报),最后组装和最终印刷。

姜戈从堪萨斯州劳伦斯期刊的办公室里走出来。可能还有一些印刷术语。来自法国的A-Django-爱好者-友好的老鼻涕虫男孩。


作为一段历史,术语"鼻涕虫"来自于报纸编辑的世界。

它是生产过程中故事的非正式名称。随着这篇报道从《垮掉的记者》到《编辑》,再到《印刷机》,这就是它引用的名字,例如,"你修正了‘俄罗斯切断欧洲天然气’报道中的错误了吗?".

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


从这里开始。

"Slug" is a newspaper term, but what
it means here is the final bit of the
URL. For example, a post with the
title,"A bit about Django" would
become,"bit-about-django"
automatically (you can, of course,
change it easily if you don’t like the
auto-generated slug).


"鼻涕虫"是一个报纸术语。slug是一个短标签,只包含字母、数字、下划线或连字符。它们通常用于URL(如django docs)。

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

就像您在堆栈溢出时添加此问题的方式一样,会生成一个动态页面,当您在地址栏中看到问题标题时,您将看到以"-"代替空格。这正是鼻涕虫的工作。

Enter image description here

你输入的标题是这样的->什么是姜戈的"鼻涕虫"?

和;

将其存储到段塞中后,归档结果将其存储到what-is-a-slug-in-django(参见本页的url)


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


塞是一个短的URL友好的特定内容的标签。它只包含字母,数字,或hyphens underscores。slugs是股票和保存的内容和它的使用作为URL的字符串。

slugfield塞可以创造的。

前:

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

如果你想使用title为塞,Django有一个简单的功能被称为slugify

1
2
3
4
5
6
7
from django.template.defaultfilters import slugify

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

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

如果它是新的uniqueness,加unique=True在塞场。

从之前的实例,例如:

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

你是一个懒惰的这段过程吗?别担心,这个插件会帮助你的。 Django是autoslug


也自动弹头在Django管理。在ModelAdmin中添加:

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

正如这里:

1
2
3
4
5
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

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

标签和短的东西,只包含字母,数字,或hyphens underscores。他们是用在urls一般。例如,在典型的博客:输入的URL

博客www.djangoproject.com https:/ / / / / / / 12 Apr 2008春/ 最后一点(春季)位于塞。