NoReverseMatch:错误,无法在模板中使用object.get_absolute_url()

时间:2015-05-10 15:57:01

标签: django templates url

我用" slug"模拟文章。填充覆盖方法save():

的属性
class Article(models.Model):
    title = models.CharField(max_length=500)
    body = models.TextField(max_length=50000)
    slug = models.SlugField(max_length=500, null=True)

    def get_absolute_url(self):
        return reverse('articles:ArticleDetailView', args=[self.slug])

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

并尝试使用通用视图DetailView显示它:

class ArticleDetailView(DetailView):
    model = Article

正如我从文件中所理解的那样" slug_field"是' slug'。因此,如果我们尝试将其与url一起使用:

url(r'^(?P<slug>[-\w]+)/$', views.ArticleDetailView.as_view(), name='article_view'),

它有效 但是如果我在模板方法中使用get_absolute_url():

 <a href="{{ article.get_absolute_url }}">{{ article.title }}</a>

django引发错误

NoReverseMatch: Reverse for 'articles.views.ArticleDetailView' with arguments '('title-1',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

2 个答案:

答案 0 :(得分:1)

当您在网址架构上指定名称时,请使用该名称进行撤消,因为django会忽略其余部分:

didReceiveLocalNotification

答案 1 :(得分:1)

您的网址格式未被称为ArticleDetailView,它被称为“article_view”,因为您已为其指定了显式名称。您应该在反向呼叫中使用该名称。

此外,由于您在捕获slug时使用的是命名组,因此您应该使用kwargs。

return reverse('articles:article_view', kwargs={'slug': self.slug})
相关问题