反向未找到错误

7
如果我有这样的URL:
url(r'^reset/(?P<uid>\w+)/(?P<token>\w+)/$', 'django.contrib.auth.views.password_reset_confirm', name="reset_password")

以及像这样的URL标签:

{% url 'reset_password' uid=uid token=token %}

当我尝试渲染包含该标签的页面时,为什么会出现此错误?
Reverse for 'reset_password' with arguments '()' and keyword arguments not found 
uid和token都是有效的字符串。

1
尝试在shell中进行调试,使用 from django.core.urlresolvers import reverse 然后执行 reverse('reset_password', kwargs={'uid':uid, 'token':token}),看看是否会获得更多信息。此外,如果你的url配置是应用程序的一部分,请确保它已包含在主要的url配置中。 - Yuval Adam
1
你确定在模板上下文中uidtoken变量有有效的值吗? - Ashald
4
我猜测上下文中不存在 token 和 uid 变量,请尝试显示它们,并在同一模板的其他位置添加以下内容:{{token|pprint}} {{uid|pprint}}。请注意,不要改变原始意思。 - mcniac
7
你能输出UUID和Token的格式吗?它们是否实际上与正则表达式匹配?通常,如果模式不匹配参数,就会出现这种错误。 - petkostas
解决了吗?如果没有,请展示你的urls.py文件... - timo.rieber
显示剩余5条评论
2个回答

1

请尝试以下方法:

1.始终尝试像'app_name:reset_password'这样对您的url进行命名空间处理,只需在urls.py文件开头添加app_name='您的应用程序名称',这将有助于您在未来处理同一项目中的多个应用程序时,如果您的html名称冲突。

2.尝试更改您的urls,因为您正在使用django auth views及其密码重置功能,您需要在重置密码后指定重定向url,只需添加即可。

{'post_reset_redirect':'<app_name>:<url_name>'}

url(r'^reset/(?P<uid>[-\w]+)/(?P<token>[-\w]+)/$', 'django.contrib.auth.views.password_reset_confirm', {'post_reset_redirect':'<your redirection url after reset password'},name="reset_password")}

请检查变量,例如'uid',因为它可能是Django自己的函数,也可能是它自己的变量名,所以请尝试使用'uidb64'


1
我认为你的uid或token含有非字母数字字符,例如“-”或“.”。因此,我建议尝试更改urls.py中的内容:
url(r'^reset/(?P<uid>.+)/(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', name="reset_password")

我不喜欢在正则表达式中使用“.”,但如果没有其他选择...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接