slug计算机术语,关于python:Django中的“slug”是什么?

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

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

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

一个例子:

The 46 Year Old Virgin

A silly comedy movie

the-46-year-old-virgin

现在假设我们有一个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。所有字母都是小写,空格由连字符-替换。看看这个网页的网址就可以了!

很好的描述,但需要补充的是:slugfield不能保证框外的唯一性,所以如果默认使用它,这是一个更好的URL:www.example.com/article/the-40-year-virgin/23/,其中"23"是article.id,并且实际上是用来执行查询的(也比在slug上查询快)。

我发现www.example.com/article/23/the-40岁的Virgin更容易阅读。

您还可以向slug添加一个唯一的约束。

如果您基于ID提供内容,那么决定是检查slug是否与内容匹配(如果不匹配则返回404),还是完全忽略它。我不认为有什么是最好的,搜索引擎优化的一般规则。因此,如果在浏览器中输入stackoverflow.com/questions/427102/…,仍将显示此页面。

@Daniel记住,一个slug还隐藏了真正的数据库ID,因此您的示例破坏了使用slug的一个优势。

@eno真的不需要隐藏数据库ID——假设所有的URL都是公开的。

@乔希是的/article/4358639485639比article/title.html更适合SEO。

@eno为seo和permalink nicey添加了slug。ID用于索引查找。StackOverflow的SEO非常出色——他们使用的正是这个策略。你的论点是"隐藏数据库ID",现在你已经把它变成了"seo"。发生什么事了?

我是通过一个鼻涕虫来阅读这个网页的!

因此,如果我们使用slug(如数据库或"数据库管理")存储主题名称,我们应该只根据slug列而不是name列进行索引和搜索吗?

定义slug的很好例子

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

术语"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。

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

5dfa8043cc99db2f02e0409f34dd4e1d.png

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

和;

将其存储到段塞中后,归档结果将其存储到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塞可以创造的。

前:

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)

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

从之前的实例,例如:

class Article(models.Model):

title = models.CharField(max_length=100)

slug = models.SlugField(max_length=100, unique=True)

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

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

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

正如这里:

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春/ 最后一点(春季)位于塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值