2013-04-11 35 views
1

一個空字符串我想用我的車型之一反向的get_absolute_url。但是,它返回空白字符串。反向恢復在get_absolute_url

url.py

url(
    regex=r'^$', 
    view=SocietyView.as_view(), 
    name='society', 
), 
url(
    regex=r'^(?P<tagname>[\w ]+)/?$', 
    view=SocietyView.as_view(), 
    name='society_with_tag', 
), 

model.py

class Tag(models.Model): 
    name = models.CharField(max_length=64, unique=True) 
    posts = models.ManyToManyField(Post, related_name='tags', null=True, blank=True) 

    def __unicode__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse("society_with_tag", kwargs={"tagname": self.name}) 

template.html

<a href="{{ tag.get_absolute_url }}"> 
    {{ tag.name }} 
</a> 

result.html

<a href=""> 
    tag 
</a> 
+0

我不熟悉Django的反向()'函數,但不應該在'get_absolute_url了'kwarg'鍵()'是' 「tag.name」',而不是'「tagname」'? – 2013-04-11 20:11:00

+0

的kwargs是url.py,其具有作爲它的參數名稱。因此,「標記名」是正確的。我想...... – taelimoh 2013-04-11 20:14:36

+0

啊。正如我所說,我看到我不熟悉Django框架。 – 2013-04-11 20:15:18

回答

1

我不知道爲什麼,但除去在結束「」解決了這個問題。

catherine和caio都給了我很好的答案,但由於我沒有使用1.5,所以不是這樣。

我改變

def get_absolute_url(self): 
    return reverse("society_with_tag", args=[self.name,]) 

def get_absolute_url(self): 
    return reverse("society_with_tag", args=[self.name]) 
2

,你必須提供app_name

@property 
def get_absolute_url(self): 
    return reverse("app_name:society_with_tag", args=[self.name]) 
+0

感謝偉大的答案。 – taelimoh 2013-04-14 20:33:44

1

確保您要驗證的標籤名稱,以便它總是與你的正則表達式[\w ]+

否則,你可以使用更多面手正則表達式[^/]+將匹配任何東西,直到下一次/

例如,在你的urls.py,使用方法:

url(r'^(?P<tagname>[^/]+)/$', SocietyView.as_view(), 
    name='society_with_tag'), 

請注意,您只需要「/?」如果你改變了APPEND_SLASH默認值設置爲False

而在你的models.py:

@models.permalink 
def get_absolute_url(self): 
    return ('society_with_tag', [self.name]) 

請記住,如果你正在使用URL namespaces你將需要添加前綴視圖名稱:

@models.permalink 
def get_absolute_url(self): 
    return ('app_name:society_with_tag', [self.name]) 
+0

感謝偉大的答案。 – taelimoh 2013-04-14 20:25:17