什么是Django中的“鼻涕”?

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

(我在本词汇表中阅读了它的定义。

Slug
一个简短的标签,只包含字母,数字, 下划线或连字符。它们通常用于URL。例如, 在典型的博客条目URL中:

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

245169 次浏览

来自这里

“鼻涕”是一个报纸术语,但什么 这意味着这里是最后一点 网址。例如,带有 标题:“A bit about Django” 成为,“关于django” 自动(你可以,当然, 改变它很容易,如果你不喜欢 自动生成的段塞)。

这是URL的描述性部分,使其更具人性化的描述性,但不一定是Web服务器所要求的-在什么是Django中的“鼻涕”?中,段塞是'in-django-wh-is-a-的段塞',但段塞不用于确定提供的页面(至少在本网站上)

“段塞”是生成有效URL的一种方式,通常使用已经获得的数据。例如,段塞使用文章的标题来生成URL。我建议通过给定标题(或其他数据)的函数生成段塞,而不是手动设置。

举个例子:

<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是一个段塞:它是通过对所有字母进行下大写并用连字符-替换空格来从标题创建的。

另请参阅此网页的URL以获取另一个示例。

“鼻塞”一词来自报纸制作领域。

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

一些系统(如Django)使用鼻塞作为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替换段塞,它仍然会发现它没问题。

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

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

虽然以下是纯粹的猜想,但鼻塞的早期含义是假币(必须以某种方式压下)。我可以设想这种用法被转换为印刷术语(因为鼻塞必须使用原始字符压下),从那里,从“金属片”的定义变为“故事摘要”的定义。从那里,从正确的印刷到网络世界只需要一小步。


(a)“哥德尔·埃舍尔,巴赫”,由一个DouglasHofstadter,我(至少)认为这是伟大的现代知识分子作品之一。你还应该看看他的其他作品,“元魔法主题”。

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

“鼻塞”这个词指的是铸造金属——这里指的是铅——印刷机的字体就是用它来制作的。之后,每家报纸的字体工厂都会定期重新熔化,并用新的模具重铸,因为在多次印刷之后,它们就会磨损。像我这样的学徒在那里开始了他们的职业生涯,并一路走到了顶峰(现在不是了)。

印刷品必须以倒退的方式组成文章的文本,并将主要字符堆叠在一起。因此,在打印时,字母将在纸上笔直。所有的印刷品都可以像印刷的那样快速阅读报纸。因此,鼻涕,(像蜗牛一样)还有缓慢的故事(最后被修复的故事)在长凳上等待着,仅仅通过它们的拳头字母来识别,大多数时候整个标题通常更具可读性。一些“热门”新闻在长凳上等待,可能在最后一分钟进行更正,(晚报)在最后组装和最终印刷之前。

姜戈出现在堪萨斯州劳伦斯期刊的办公室。那里可能还有一些印刷行话。一个-django-爱好者-&-友好-老-鼻涕-男孩-来自-法国。

在django-admin也自动弹出。在ModelAdmin添加:

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

如这里:

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


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

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

Django中的一个段塞字段用于为动态创建的网页存储和生成有效的url

就像你在Stack Overflow上添加这个问题并生成动态页面的方式一样,当你在地址栏中看到时,你会看到你的问题标题以“-”代替空格。这正是段塞字段的工作。

在此输入图片描述

你输入的标题是这样的->Django中的“鼻涕”是什么?

在将其存储到弹状字段中时,它变成了“What-is-a-弹状-in-django”(请参阅此页面的URL)

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

Slug可以使用SlugField创建

例如:

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

如果你想使用title作为段塞,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)

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

例如,从前面的例子:

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

你懒得做段塞处理吗?别担心,这个插件会帮助你。 django-autoslug

鼻塞

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

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

简而言之,在ecommerec站点中使用有效URL来帮助摆脱那些看起来丑陋的URL,而不是将URL显示为www.myecom.com/product/5432156,我可以在www.myecom.com/product/iphone11的帮助下显示它

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

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

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

Slug仅包含:

  • 字母:a-z, A-Z
  • 数字:0-9
  • 标签:_
  • 连字符:-

Slug在Django中用于动态生成人类友好/可读的URL。例如,此页面的当前URL表示: 什么是Django中的“鼻涕”?.

请注意URL是如何与实际问题(Django中的段塞是什么)一起被阻塞的