在Django app模型中,如何获取url前缀

时间:2015-07-10 07:31:43

标签: django

我正在编写名为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

中的前缀

3 个答案:

答案 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})