我试图在我的一个模型中使用反向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 :(得分: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])