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

Why do I need to use SlugField in Django?

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

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

严格来说,您不需要使用 SlugField。

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

如果您愿意,可以制作自己的 slug,将其设为 URL-friendly(删除任何 URL 不包含的符号,转换任何需要 url-encoded, 将空格变成连字符...) 并删除任何不必要的内容(例如删除诸如 the、a、an、is、are... 之类的词,或将冗长的标题裁剪为最大数量的词或字符)。

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

它是一个字段的原因是,尽管您可以,但每次访问 object 时都计算一个 slug 并不明智:slug 只会在标题更改时更改,这意味着可能永远不会,所以只生成一次然后将其存储在数据库中以便下次使用它是有意义的,而不必再次生成它。这具有使某篇文章的 URL 永久化的额外优势:您可以将其设置为即使您更改文章标题 which would be a good thing.[=11= 也不会更改。 ]

一旦你拥有它,因为 slug 明确地指向特定的 object,它充当一种 human-readable 唯一 ID,因此它可用于检索 object 与不透明的数字 ID 一样有效地从数据库中提取。它还掩盖了你有多少 objects(如果出于某种原因你想这样做),因为一个顺序 ID,比如 1543,告诉任何人你可能有 1542 个其他 objects在那之前。