我用" 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: []
答案 0 :(得分:1)
当您在网址架构上指定名称时,请使用该名称进行撤消,因为django会忽略其余部分:
didReceiveLocalNotification
答案 1 :(得分:1)
您的网址格式未被称为ArticleDetailView,它被称为“article_view”,因为您已为其指定了显式名称。您应该在反向呼叫中使用该名称。
此外,由于您在捕获slug时使用的是命名组,因此您应该使用kwargs。
return reverse('articles:article_view', kwargs={'slug': self.slug})