1

我正在尝试在我的一个模型中对 get_absolute_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',
),

模型.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})

模板.html

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

结果.html

<a href="">
    tag
</a>
4

3 回答 3

2

你必须提供app_name

@property
def get_absolute_url(self):
    return reverse("app_name:society_with_tag", args=[self.name])
于 2013-04-12T02:28:29.250 回答
2

确保您正在验证标签名称,以便它始终与您的正则表达式匹配[\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 命名空间,则需要将前缀添加到视图名称:

@models.permalink
def get_absolute_url(self):
    return ('app_name:society_with_tag', [self.name])
于 2013-04-12T02:36:18.603 回答
1

I have no idea why but removing ',' in the end solved this problem.

Both catherine and caio gave me great answers but since I am not using 1.5, that wasn't it.

I changed

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

into

def get_absolute_url(self):
    return reverse("society_with_tag", args=[self.name])
于 2013-04-14T20:25:00.987 回答