这种类似的方法向后兼容使用数字 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])