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中的空格无效,需要用难看的
1 | www.example.com/article/The%2046%20Year%20Old%20Virgin |
这并不能解决我们有意义的URL。这不是更好吗:
1 | www.example.com/article/the-46-year-old-virgin |
那是蛞蝓。
如果我能提供一些历史背景:
术语"slug"与铸造金属铅有关,在这种情况下,印刷字体是由铸造金属铅制成的。每一张纸都有自己的字体工厂定期重新融化和重新铸造在新的模具,因为在许多印刷后,他们变得磨损。像我这样的学徒在那里开始了他们的职业生涯,一直走到了顶峰(不再是了)。
排字机必须以向后的方式编写文章的文本,并将前导字符按一定的顺序堆叠起来。所以在印刷的时候,字母会直接印在纸上。所有的打字员都能像印刷版一样快速地阅读报纸。因此,鼻涕虫(像蜗牛一样)和慢故事(最后一个固定下来的)都是坐在长凳上等待着的,它们的第一个字母仅仅是识别出来的,大部分是整个标题,通常更容易阅读。一些"热门"新闻在台上等待,等待可能的最后一分钟修正(晚报),最后组装和最终印刷。
姜戈从堪萨斯州劳伦斯期刊的办公室里走出来。可能还有一些印刷术语。来自法国的A-Django-爱好者-友好的老鼻涕虫男孩。
作为一段历史,术语"鼻涕虫"来自于报纸编辑的世界。
它是生产过程中故事的非正式名称。随着这篇报道从《垮掉的记者》到《编辑》,再到《印刷机》,这就是它引用的名字,例如,"你修正了‘俄罗斯切断欧洲天然气’报道中的错误了吗?".
Django使用它作为URL的一部分来定位故事,一个例子是
从这里开始。
"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。
就像您在堆栈溢出时添加此问题的方式一样,会生成一个动态页面,当您在地址栏中看到问题标题时,您将看到以"-"代替空格。这正是鼻涕虫的工作。
你输入的标题是这样的->什么是姜戈的"鼻涕虫"?
和;
将其存储到段塞中后,归档结果将其存储到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有一个简单的功能被称为
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,加
从之前的实例,例如:
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春/ 最后一点(春季)位于塞。