2013-07-31 70 views
2

這段代碼有什麼問題? get_absolute_url在我的模板中呈現時是空白的,這意味着它在某處失敗。Django Slug不能在get_absolute_url中工作

我懷疑這是蛞蝓,因爲這是我第一次嘗試中的Django使用它:

感謝

型號:

class Entry(models.Model): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=255, unique=True) 

    def get_absolute_url(self): 
     return reverse("EntryDetail", kwargs={"slug": self.slug}) 

網址:

url(r'^entry/(?P<slug>[^\.]+).html', 
          blog_views.EntryDetail.as_view(), 
          name='blog_entry'), 

查看:

class EntryDetail(DetailView): 

    context_object_name = 'entry' 
    template_name = "blog.entry.html" 
    slug_field = 'slug' 

    def get_object(self): 
     return get_object_or_404(Entry, url=self.slug_field) 
+1

你也可以上傳你的模板?我也認爲你應該在反向函數中使用url名稱而不是視圖名稱(但我可能會在這裏弄錯)。 – Private

+2

是的,'reverse'正在尋找一個視圖函數,而不是一個類。使用'reverse('blog_entry',kwargs = {「slug」:self.slug})'它應該可以工作。 –

回答

3

基於什麼@Peter DeGlopper在評論中指出:它看起來像你試圖讓使用類基礎觀絕對URL。請勿在此處使用反向,而應始終爲您的網址命名,然後參考該網址。

例如,這是它應該如何看:

模式

@models.permalink 
def get_absolute_url(self): 
    return 'blog_entry',(), {'slug': self.slug} 

網址

url(r'^entry/(?P<slug>[^\.]+).html', 
    blog_views.EntryDetail.as_view(), 
     name='blog_entry'), 
+0

我明白了,現在這樣做很有意義,也很有用。謝謝 – GrantU

+2

雖然這是被接受的答案,但仍然更好地使用reverse作爲永久鏈接,不建議在django中使用:「不再推薦使用permalink裝飾器,而應該在get_absolute_url方法的主體中使用reverse()。 https://docs.djangoproject.com/en/1.7/ref/models/instances/#the-permalink-decorator。 – Decoder