这种类似的方法与我们使用数字 id 归档的 url 向后兼容。
在 models.py 中添加一个slug 字段和一个保存定义:
from django.template.defaultfilters import slugify
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
def save(self, *args, **kwargs):
#save a slug if there is no slug or when it's 'no-slug' (the default slug)
if not self.slug or self.slug == 'no-slug':
self.slug = slugify(self.name)
super(Project, self).save(*args, **kwargs)
在 urls.py 中添加第二个url 模式:
#original:
url(r'^(?P<id>\d+)/$', 'project.views.view', name='view_url'),
#new pattern added under original:
url(r'^(?P<id>\d+)-(?P<slug>[-\w\d]+)/$', 'project.views.view', name='view_url'),
在 views.py 中让 slug 通过:
def view(request, mid=None, slug=None):
然后,使用此 URL模式所需要做的就是编辑 models.py:
def get_absolute_url(self):
return reverse('view_url', args=[self.id, self.slug])