我正在编写名为blogengine
的Django博客应用
在根urls.py
中:
url(r'^blog/', include('blogengine.urls')),
在我的blogengine/models.py
class Post(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField()
text = models.TextField()
def get_absolute_url(self):
return "/blog/post/%s/" % self.id
这里我定义了一个带有硬编码get_absolute_url
前缀的函数/blog/
。
我怎么能阻止这个硬代码并使用某种方式来获取ROOT_URLCONF
答案 0 :(得分:1)
不,这绝对不是这样做的方法。你的模型根本不应该关心前缀。
相反,您应该使用提供的reverse
函数来计算URL,无论前缀是什么:
def get_absolute_url(self):
return reverse('blog-post', kwargs={'id': self.id})
答案 1 :(得分:1)
get_absolute_url()不是必需的:
url(r'^blog/$', views.post_list, name='post_list'),
url(r'^blog/(?P<post_id>[\w+-]*)/$', views.post_detail, name='post_detail')
答案 2 :(得分:1)
您可以使用命名网址的反向解析。以下是详细信息https://docs.djangoproject.com/en/1.8/topics/http/urls/#reverse-resolution-of-urls
的链接这是一个例子。
url(r'^post/(?P<id>\d+)/$', post_view, name='post_detail'),
这是模型。 来自django.core
from django.core.urlresolvers import reverse
class Post(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField()
text = models.TextField()
def get_absolute_url(self):
return reverse('post_detail', kwargs={'id': self.id})