【发布时间】:2013-07-03 22:27:13
【问题描述】:
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)
...
网址看起来像
example.com/blog/23/why-iam-here/
促使我采用这种方法的三件事
- Slug 字段不具有隐式唯一性。
-
get_object_or_404(Blog, pk=id)必须比get_object_or_404(Blog, slug=slug)快。 - 向现有模型添加 slug 字段涉及数据迁移。
那么为什么是 SlugField()? ,除了动态生成slug的成本外,上述方法有什么缺点?
【问题讨论】: