我在谷歌上搜索发现:“SlugField 是一个用于在关系数据库中存储 URL slug 的字段。SlugField 是由 Django ORM 定义的列。SlugField 实际上是在 django.db 中定义的。”
但是,这个定义对我来说听起来有点复杂。在这种情况下,我什至不知道 slug 是什么,也不确定 Django ORM。我只需要一个简单的理由为什么我应该在 Django 中使用 SlugField。
您并不严格需要使用 SlugField。
“Slug”是从新闻学中借来的一个术语,指的是标题的简短版本。正如对您的回答的评论中提到的那样,这是一种使 URL 更加明确的方法,同时仍然保持它们有点短,而不是使用例如完整标题(通常太长)或 ID(这不会不要明确或令人难忘:想想一个用户想要找到一篇他们记得读过的文章:如果他们开始在他们的地址栏中输入一些关键字,一个包含它的 URL 将弹出,一个带有 ID 的 URL 不会)。
如果您愿意,您可以制作自己的 slug,方法是使其对 URL 友好(删除 URL 不包含的任何符号,转换任何需要进行 url 编码的内容,将空格转换为连字符......)并删除任何内容不必要的(例如删除诸如 the、a、an、is、are... 之类的词或将冗长的标题裁剪为最大数量的词或字符)。
SlugField 只是一种方便,您可以使用它在某种程度上实现自动化。它还附带了一些您可能需要的额外功能:例如,它会自动从您选择的字段中生成一个 slug,并且它可以为该 slug 添加一个唯一编号,这样您就不会意外地得到两个相同的 URL两篇具有相同标题的不同文章。
它是一个字段的原因是,虽然你可以,但每次访问对象时计算一个 slug 并不聪明:slug 只会在标题更改时发生变化,这意味着可能永远不会,所以只生成一次是有意义的然后将其存入数据库以备下次使用,无需再次生产。这具有使某个文章的 URL 永久化的额外优势:您可以将其设置为即使您更改文章的标题,slug 也不会改变,这将是一件好事。
一旦你有了它,因为一个 slug 明确地指向一个特定的对象,它充当一种人类可读的唯一 ID,因此它可以像不透明的数字 ID 一样有效地用于从数据库中检索对象。它还掩盖了您拥有多少对象(如果出于某种原因您想要这样做),因为顺序 ID,例如 1543,告诉任何人您可能有 1542 个其他对象在该对象之前。