我去http://127.0.0.1:8000/books/author/时收到错误:
/ books / author /
中的NoReverseMatch使用参数'()'和关键字反转'/ books / author / 1 /' 没有找到参数“{}”。尝试了0种模式:[]
我的观点是ListView,模板代码在
之下<ul>
{% for author in object_list %}
<li><a href="{% url author.get_absolute_url %}">{{ author.name }} </a></li>
{% endfor %}
</ul>
当我将模板更改为:
时,它可以正常工作<ul>
{% for author in object_list %}
<li><a href="{% url 'bookstore:author-details' author.pk %}">{{ author.name }} </a></li>
{% endfor %}
</ul>
我的models.py包含定义了get_absolute_url()
的类作者class Author(models.Model):
name = models.CharField(max_length=200)
birthday = models.DateField()
photo = models.ImageField(blank=True)
nickname = models.CharField(max_length=200, blank=True)
def get_absolute_url(self):
return reverse('bookstore:author-details', kwargs={'pk': self.pk})
主要urls.py包含命名空间
urlpatterns = [
url(r'^books/', include('bookstore.urls', namespace='bookstore')),
]
这是bookstore.urls
urlpatterns = [
url(r'^author/', include([
url(r'^$', views.AuthorsList.as_view(), name='authors-list'),
url(r'^create/', views.AuthorCreate.as_view(), name='author-create'),
url(r'^(?P<pk>[0-9]+)/', include([
url(r'^$', views.AuthorDetails.as_view(), name='author-details'),
url(r'edit/', views.AuthorEdit.as_view(), name='author-edit'),
url(r'delete/', views.AuthorDelete.as_view(), name='author-delete'),
]))
])),
]
答案 0 :(得分:3)
你混合了两种方法,即:
$ git rebase --interactive --onto dev dev utu # <-- hit tab, ta-dah:
$ git rebase --interactive --onto dev dev utumno-
https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url
和
{% url "routing-name" arguments %}
https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#reverse
这两种方法都返回一个字符串,表示某个路由的地址(在您的情况下为'/ books / author / 1 /')。
您现在要做的是将reverse("routing-name", [arguments])
的结果提供给reverse()
功能。文字这导致url
。现在Django抱怨路由'/ books / author / 1 /'不存在。
解决方案:{% url '/books/author/1/' %}
。
答案 1 :(得分:0)
self.pk是一个整数,你需要一个字符串。
更改:
def get_absolute_url(self):
return reverse('bookstore:author-details', kwargs={'pk': self.pk})
到:
def get_absolute_url(self):
return reverse('bookstore:author-details', kwargs={'pk': str(self.pk)})
也可以改为使用args:
def get_absolute_url(self):
return reverse('bookstore:author-details', args=[str(self.pk)])
答案 2 :(得分:0)
Django 1.5+需要在url模板标记
中的方法名称周围加引号{% url author.get_absolute_url %}
变为
{% url 'author.get_absolute_url' %}