为什么我需要在 Django 中使用 SlugField?

赛布卡伊尔

我在谷歌上搜索发现:“SlugField 是一个用于在关系数据库中存储 URL slug 的字段。SlugField 是由 Django ORM 定义的列。SlugField 实际上是在 django.db 中定义的。”

但是,这个定义对我来说听起来有点复杂。我什至不知道在这种情况下 slug 是什么,也不确定 Django ORM。我只需要一个简单的理由为什么我应该在 Django 中使用 SlugField。

特贝尔齐

您并不严格需要使用 SlugField。

“Slug”是从新闻业借用的术语,指的是标题的简短版本。正如在对您的回答的评论中提到的,这是一种使 URL 更加明确同时仍然保持简短的方法,而不是使用例如完整的标题(通常会太长)或 ID(不会一点也不明确或令人难忘:想想一个用户想要找到他们记得阅读的文章:如果他们开始在地址栏中输入某个关键字,则会弹出包含该关键字的 URL,而带有 ID 的则不会)。

如果您愿意,您可以制作自己的 slug,方法是使其对 URL 友好(删除 URL 不包含的任何符号,转换需要进行 url 编码的任何内容,将空格转换为连字符...)并删除任何内容不必要的(例如,删除像 the、a、an、is、are... 这样的单词或将冗长的标题裁剪为最大数量的单词或字符)。

SlugField 只是一种便利,您可以使用它在某种程度上实现自动化。它还带有一些您可能需要的额外功能:例如,它会根据您选择的字段自动生成一个 slug,并且它可以向 slug 添加一个唯一编号,这样您就不会意外地得到两个相同的 URL两篇具有相同标题的不同文章。

它是一个字段的原因是,尽管您可以,但每次访问对象时都计算 slug 并不聪明:slug 只会在标题更改时更改,这意味着可能永远不会,因此只生成一次是有意义的然后存入数据库,下次使用,不用再生产。这具有使某个文章的 URL 永久化的额外优势:您可以将其设置为即使更改文章标题也不会更改 slug,这将是一件好事

一旦你有了它,因为 slug 明确地指向一个特定的对象,它充当一种人类可读的唯一 ID,因此它可以像不透明的数字 ID 一样有效地从数据库中检索对象。它还模糊了您拥有的对象数量(如果出于某种原因您想要这样做),因为例如 1543 的顺序 ID 会告诉任何人您可能还有 1542 个在该对象之前出现的其他对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在Django中使用SlugField()?

为什么我需要在Django的TestCase中使用辅助方法create_user()?

Django中SlugField的用途是什么?

Django SlugField与URLField

Django SlugField 部分显示

Django Slugfield删除文章(“ the”,“ a”,“ an”,“ that”)

Slugfield在探戈与django

Django模型中的SlugField()和CharField()有什么区别

为什么我需要在 shareReplay 中使用管道?

为什么我需要在Android中使用super()?

为什么要在Django中使用基本视图?

为什么我需要在终端上使用 sudo?

为什么我需要在资源上使用.close()

Django SlugField“此字段是必需的”错误

Django中的SlugField和覆盖保存

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

为什么我们需要在图灵的暂停证明中使用否定部分?

为什么我们需要在Java中使用移位运算符?

为什么我需要在node-postgres中使用async / await两次

为什么我需要在代码中使用 `display: flex` 来实现纵横比技术?

为什么我需要在以下场景中使用 ReactJS state 在 AJAX 之后更新 UI

为什么我永远不需要在Redux中使用subscription?

为什么我需要在C#和PostgreSQL中使用Npgsql引用列和表?

为什么我需要在工厂中使用angular.copy?

如果我支持Fvoid类型,为什么需要在F#中使用单位类型?

为什么我们需要在Inno Setup中使用#expr指令?

为什么我需要在索引中使用下划线命名属性?

为什么我需要在所有传递闭包中使用ConfigureAwait(false)?

为什么我们需要在Html.BeginForm中使用@using