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)
如果它需要唯一性,请在slug字段中添加 unique=True .
例如,从前面的例子:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
9 回答
作为一段历史,“slu”一词来自报纸编辑的世界 .
这是制作过程中故事的非正式名称 . 随着故事蜿蜒曲折的路径从拍卖记者到编辑再到“印刷机”,这就是它所引用的名称,例如,“你在”俄罗斯 - 削减 - 欧洲 - 天然气“故事中修正了这些错误吗? ?” .
Django使用它作为URL的一部分来定位故事,例如
www.mysite.com/archives/russia-cuts-europe-gas
.Slug是一个报纸术语 . slug是一个短标签,只包含字母,数字,下划线或连字符 . 它们通常用于URL . (如django docs)
Django中的slug字段用于存储和生成动态创建的网页的有效URLs .
就像你在Stack Overflow上添加这个问题的方式一样,生成一个动态页面,当你在地址栏中看到时,你会看到你的问题 Headers 用“ - ”代替空格 . 这正是一个slu field领域的工作 .
你输入的 Headers 是这样的 - > Django中的“slug”是什么?
&
在将它存储到一个slug中时,将其导入到什么是slug-in-django中(参见本页的URL)
如果我可以提供一些历史背景:
术语 "slug" 与铸造金属铅有关,在这种情况下,制造印刷机字体 . 然后每张纸都经常将其字体工厂重新熔化并在新模具中重铸,因为经过多次印刷后,它们已经磨损了 . 像我这样的学徒在那里开始他们的职业生涯,并一路走到顶峰(不再是) .
印刷品必须以向后的方式组成文章的文本,其中铅字符以明智的方式堆叠 . 因此,在印刷时,字母将直接在纸上 . 所有的印刷品都可以读取与报纸一样快的镜像 . 因此,slu ,,(像蜗牛一样)慢的故事(最后要修复的)是很多在板凳上等待,完全由他们的拳头字母识别,大多数整个 Headers 通常更具可读性 . 在最后一次组装和最终印刷之前,一些“热门”新闻在替补席上等待最后一分钟的修正(晚报) .
Django出自堪萨斯州劳伦斯杂志的办公室 . 可能一些印刷术语仍然存在 . A-django-enthusiast-&-friendly-old-slug-boy-from-France.
来自here .
也是django-admin的自动slu ..在ModelAdmin中添加:
在这里:
这是一种生成有效URL的方法,通常使用已经获得的数据 . 例如,使用文章 Headers 生成URL . 我建议使用函数生成slug,给定 Headers (或其他数据),而不是手动设置 .
一个例子:
现在让我们假设我们有一个Django模型,例如:
如何使用具有有意义名称的URL引用此对象?您可以使用Article.id,因此URL将如下所示:
或者,您可以像这样引用 Headers :
问题是,空格在URL中无效,它们需要被
%20
替换,这是丑陋的,使其如下:那并没有解决我们有意义的网址 . 这不会更好:
这是一个slu ..
the-46-year-old-virgin
. 所有字母都是向下的,空格由连字符-
替换 . 有关示例,请参阅此网页的URL!slug
某物的短标签,仅包含字母,数字,下划线或连字符 . 它们通常用于URL . 例如,在典型的博客条目URL中:
https://www.djangoproject.com/weblog/2008/apr/12/spring/最后一位( Spring 天)是slu ..
Slug是特定内容的URL友好短标签 . 它只包含字母,数字,下划线或连字符 . Slug通常与相应的内容一起保存,并作为URL字符串传递 .
Slug可以使用SlugField创建
例如:
如果你想使用title作为slug,django有一个名为
slugify
的简单函数如果它需要唯一性,请在slug字段中添加
unique=True
.例如,从前面的例子:
你是否懒得做slu process过程?别担心,这个插件会对你有所帮助 . django-autoslug
它是URL的描述性部分,使其更具人性化描述性,但不一定是Web服务器所要求的 - 在What is a "slug" in Django?中,slug是'in-django-what-is-a-slug',但slug不用于确定page served(至少在此网站上) )