在模板中直接添加‘/home’這樣的鏈接是十分不推薦的,因為這是一個相對的鏈接,在不同網頁中打開可能會返回不一樣的結果。
所以推薦的是
<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
這種方式,或者
<a href={% url 'article' article.pk %} >
這里第二種方式同時需要在urls.py中設置,
url(r'^article/(?P<pk>[0-9]+)/$', article, name='article'),
同時對應的article_view應該有2個參數(request, pk)
get_absolute_url是一個方法,需要在model里聲明一下;下面是官方的推薦使用方式
不推薦
# 不推薦
def get_absolute_url(self): return "/people/%i/" % self.id
# 推薦
def get_absolute_url(self): from django.core.urlresolvers import reverse return reverse('people.views.details', args=[str(self.id)])
# 不推薦
def get_absolute_url(self): return '/%s/' % self.name
<!-- BAD template code. Avoid! --> <a href="/people/{{ object.id }}/">{{ object.name }}</a>
# 推薦
<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
更具體的可以參考一下 https://github.com/the5fire/django_selfblog/blob/master/selfblog/blog/models.py
這里作者使用了“偽靜態url”,get_absolute_url方法如下:
def get_absolute_url(self): return '%s/%s.html' % (settings.DOMAIN, self.alias)
alias是自己設置的,生成的鏈接就是: http://example.com/alias這種,由於一篇文章的鏈接是固定的,所以看上去像靜態頁面一樣
參考鏈接:
https://github.com/the5fire/django_selfblog
http://huacnlee.com/blog/django-url-routes-and-get-absolute-url/
https://docs.djangoproject.com/en/1.9/ref/models/instances/