伙计们,我收到特定网址调用的NoReverseMatch错误。
我想知道:有没有什么好的工具来调试这些?例如,某些方法列出了哪些URL已注册?
我的具体例子:
模板:
<a href=
"{% url django.contrib.auth.views.redirect_to_login blarg %}">log in</a>
错误:
NoReverseMatch: Reverse for
'settings.django.contrib.auth.views.redirect_to_login'
with arguments '('[[ UNDEFINED VARIABLE ]]',)'
and keyword arguments '{}' not found.
我正在使用带有appenginepatch的Google App Engine,因此Django本身已被修改。
答案 0 :(得分:3)
在这种特殊情况下,url reversal使用视图函数的完整路径,最简单的方法就是查看视图函数。在Django-1.1中,这看起来像:
def redirect_to_login(next, login_url=None,
redirect_field_name=REDIRECT_FIELD_NAME):
"Redirects the user to the login page, passing the given 'next' page"
if not login_url:
login_url = settings.LOGIN_URL
return HttpResponseRedirect('%s?%s=%s' % (login_url,
urlquote(redirect_field_name),
urlquote(next)))
此函数甚至不接受请求对象,因此它甚至不是正确的视图,甚至没有在django/contrib/auth/urls.py
中注册。这意味着它可能只是在其他视图中用作辅助函数。
在任何情况下,根据您的特定示例,您可能想要做的是使用普通的旧登录URL,如下所示:
<a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">
log in
</a>
此外,我相信如果您在设置中设置TEMPLATE_DEBUG = True
,您将获得django在抛出错误之前检查过的所有网址模式的列表。