之前在 Template 里面调用 URL 地址都是用 {% url 'apps.views.post' post.id %}
这种方式来调用 urls.py 里面配置的 URL,而且 Template 里面会用到很多,如果当参数有变动的时候,重构将会是很麻烦的事情。
下面通过在 models 中定义一个 get_absolute_url
方法:
# -*- coding: utf-8 -*-
from django.db import models
from django.shortcuts import reverse
class Post(models.Model):
title = models.CharField('标题', max_length=200)
slug = models.CharField('slug', max_length=255, blank=True)
summary = models.TextField('摘要', blank=True)
body = models.TextField('正文')
def get_absolute_url(self):
return reverse('post_view', args=[self.slug])
在 urls.py 里面配置 URL:
url(r'^post/(?P<slug>[a-zA-Z0-9_\-]+)[/]{0,1}$', 'apps.views.post', name='post_view'),
将来在 Template 里面调用 URL 地址的时候就可以使用下面这种方式:
{{ post.get_absolute_url }}