有人可以用简单的术语解释为什么Django会抛出“NoReverseMatch at /”错误

时间:2013-12-24 07:58:06

标签: python django django-templates django-views

错误主要归类为
1)“NoReverseMatch at /”
2)“模板渲染期间出错”

2 个答案:

答案 0 :(得分:1)

好的,所以你在模板中有这个:

{% url "bmark_bookmark_user" bookmark.owner.username %}

这是你的追溯:

Reverse for 'bmark_bookmark_user' with arguments '(u'mario',)' and
keyword arguments '{}' not found. 
1 pattern(s) tried: ['user/(?P<username>[-\\w+])/$']

你的regexp使用一个命名组(?P<username>[-\\w+]),它告诉Django你想要使用关键字参数进行查看。这也意味着你必须使用关键字参数来试图反转网址,IOW:

{% url "bmark_bookmark_user" username=bookmark.owner.username %}

在模板和

reverse("bmark_bookmark_user", kwargs=dict(username=bookmark.owner.username))

在Python代码中。

此外,您的模式无法按预期运行:

>>> re.match("(?P<username>[-\\w+])", "mario").groups()
('m',)

你很可能想要"^/user/(?P<username>[-\\w]+)/$"代替:

>>> re.match("(?P<username>[-\\w]+)", "mario").groups()
('mario',)

答案 1 :(得分:-1)

重要的错误消息是

Exception Value: Reverse for 'bmark_bookmark_user' with arguments '(u'mario',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['user/(?P<username>[-\\w+])/$']

您尝试按{% url bmark_bookmark_user 'mario' %}呈现网址,bmark_bookmark_user用户名mario与模式不匹配。

怎么样

^user/(?P<username>[0-9A-Za-z-_.]+)/$'

并给出引号,

{% url 'bmark_bookmark_user' 'mario' %}

如果您确定自己的网址有效但仍然发现错误,请尝试将load url from future放在模板的第一行(只是为了确保导入网址)。