gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:35:05 29 4
gpt4 key购买 nike

Django 有 models.SlugField() 可以帮助我们创建一些看起来很酷的 url。我的问题是为什么将它指定为一个字段

假设我有这个模型

 class Blog(models.Model):
title = models.CharField()

如果我想添加 slug,我可以使用

 class Blog(models.Model):
title = models.CharField()

def title_slug(self):
return slugify(self.title)

urls 我可以直接使用

(r'^blog/(?P<id>\d+)/(?P<slug>[-\w]+)/$', 'app.views.blog_view'),

观看次数

def blog_view(request, id ,slug):
get_object_or_404(Blog, pk=id)
...

url 看起来像

example.com/blog/23/why-iam-here/

有三件事让我采用这种方法

  1. Slug 字段不具有隐式唯一性。
  2. get_object_or_404(Blog, pk=id) 必须比 get_object_or_404(Blog, slug=slug) 快。
  3. 向现有模型添加 slug 字段涉及数据迁移。

那么为什么要使用 SlugField()? , 除了动态生成 slug 的成本外,上述方法还有哪些缺点?

最佳答案

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

  1. 它是人性化的(例如/blog/而不是/1/)。
  2. 在标题、标题和 URL 中保持一致是很好的 SEO。

动态生成的 slug 的最大缺点是在 urls.py 中接受 slug 而不是使用 slug 来获取正确的对象?这是糟糕的设计。

如果您提供并接受 slug,但不检查它们,那么您有多个 URL 返回相同的内容。所以 /1/useful-slug//1/this-is-a-bs-slug/ 都将返回相同的页面。

这很糟糕,因为它不会让人类的生活变得轻松。您的访问者必须提供一个 ID 和一些多余的东西。重复的页面是搜索引擎的噩梦。哪一页是正确的?重复的页面最终排名较低。参见 https://support.google.com/webmasters/answer/40349?hl=en (最后一页)

您可以争辩说您始终如一地实现自己生成的精美链接,但人们和机器人一直在猜测 URL(请参阅您的日志文件)。当您接受所有 slug 时,人类和机器人总会猜对。

同时将 slug 保存到数据库可以节省处理能力。您生成 slug 一次并重复使用它。查找 slug 或每次生成它的效率更高(低)?

管理员中的 Slug 字段对于让编辑者有机会编辑 slug 很有用。也许是为了提供标题中没有但仍值得一提的额外信息。

奖励:更新迁移的数据:

from django.template.defaultfilters import slugify

for obj in Blog.objects.filter(slug=""):
obj.slug = slugify(obj.title)
obj.save()

关于django - 为什么在 Django 中使用 SlugField()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495299/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com