这种类似的方法与使用数字 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):
if not self.slug or self.slug == 'no-slug':
self.slug = slugify(self.name)
super(Project, self).save(*args, **kwargs)
在urls.py中添加第二个
url模式:
url(r'^(?P<id>\d+)/$', 'project.views.view', name='view_url'),
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):
接下来,您需要做的就是编辑 models.py 文件并使用此 URL 模式:
def get_absolute_url(self):
return reverse('view_url', args=[self.id, self.slug])