反向返回get_absolute_url中的空字符串

时间:2013-04-11 20:05:20

标签: python django

我试图在我的一个模型中使用反向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>

3 个答案:

答案 0 :(得分:2)

您必须提供app_name

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

答案 1 :(得分: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])

答案 2 :(得分:1)

我不知道为什么要删除&#39;,&#39;最终解决了这个问题。

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])