命名的URL模式抛出NoReverseMatch异常

时间:2012-10-11 00:29:16

标签: django django-templates

我正在Django 1.4中实现规范书籍/作者/出版商的例子。在我的视图中显示了所有书籍的列表,我在一个锚标记中插入了一个url模板标记,该标记引用了一个命名的URL模式:

{% for book in book_list %}
    {# <a href="/book/{{ book.id }}/">{{ book.title }}</a> #}
    <a href="{% url 'book-details' book.id %}">{{ book.title }}</a>
{% endfor %}

(请注意,我已经注释掉 工作的硬编码网址。)

我的网址是:

url(r'^book/$', 'app.views.show_all_books', name="all-books"),
url(r'^book/(\d+)/$', 'app.views.show_book_details', name="book-details"),

当我点击锚点查看图书的详细信息时,我收到此错误:

NoReverseMatch at /book/
Reverse for "book-details" with arguments '(1,)' and keyword arguments '{}' not found.  

我已经在这里阅读了其他有关此错误的人的帖子,以及关于url模板标签和命名网址模式的Django文档,但我看不出我做错了什么。如果有帮助,这里是'show_book_details'功能的签名:

def show_book_details(request, id):

我想我并不完全理解错误消息告诉我的内容。我已经尝试删除urlpattern名称周围的单引号,我也尝试使用viewpath'app.views.show_book_details'而不是命名的urlpattern,但两种变化都没有解决问题。有人可以帮忙吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

从模板中的url标记中删除引号:

{% url book-details book.id %}

https://docs.djangoproject.com/en/1.4/ref/templates/builtins/?from=olddocs#url