2015-07-10 41 views
0

我寫一個名爲blogengine Django的博客應用程序根urls.py在Django應用程序模型,如何讓網址前綴

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

謝謝你所有的答案,它有很大的幫助。我可以通過命名url調度程序在python和模板代碼中使用反向解析,然後刪除硬代碼:) – CSJ

回答

1

您可以使用名爲url的反向解析。這裏是詳細的鏈接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}) 
1

不,這絕對不是這樣做的方式。你的模型不應該關心前綴。

相反,你應該使用提供reverse函數來計算URL,無論前綴:

def get_absolute_url(self): 
    return reverse('blog-post', kwargs={'id': self.id}) 
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')