【问题标题】:NoReverseMatch at /user_details/reset-password/user_details/reset-password 处的 NoReverseMatch
【发布时间】:2015-10-29 22:27:00
【问题描述】:

我知道问得很好,但不知何故,其他答案似乎都没有解决我的问题。

ReverseMatch 出现错误,这里是相关的 urls.py 部分:

# for password reset
    url(r'^reset-password$','django.contrib.auth.views.password_reset', {'post_reset_redirect' : 'user_details/reset_password.html', 'template_name': 'user_details/reset_password.html'}, name="password_reset"),
    url(r'^reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'post_reset_redirect' : 'user_details/reset_password.html'}, name="password_reset_confirm"),

我认为这个名字定义得很好?

问题出在模板/usr/lib/python2.7/dist-packages/django/contrib/admin/templates/registration/password_reset_email.html,第6行出错:

{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

{% url ...} 以红色突出显示。

为什么? 我假设 Django 会使用该视图的默认模板?

谢谢!

克里斯

【问题讨论】:

  • 只是为了确保它不会像某种疏忽一样小,您可以在浏览器中点击 /reset/uidb64/token 端点吗?只是想确保你的 url 加载路径中有 url。
  • 这很好用。我只是将值粘贴到 URL 和 BINGO 中,加载默认页面。
  • 您可以将您的 uidb64 粘贴到评论中吗?还有你使用的是哪个 django 版本?
  • @TitusP 我的 uidb64 是:MQ Django 版本是 1.7.6。
  • 您是否尝试过使用 Django 内置的身份验证 URL 来查看这些是否有效(只需尝试 urlpatterns = [ url('^', include('django.contrib.auth.urls')) ])?仅查看文档与您的 URL,看起来您的匹配不正确。内置 admin 中的 url 模式是 ^reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1, 13}-[0-9A-Za-z]{1,20})/$

标签: django


【解决方案1】:

是的,我不得不解决覆盖 Django 默认电子邮件的问题,因为反向 URL 查找不希望正常运行。

所以我创建了原始 Django 电子邮件文件的副本(/usr/lib/python2.7/dist-packages/django/contrib/admin/templates/registration/password_reset_email.html):

{% load i18n %}{% autoescape off %}
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}

{% trans "Please go to the following page and choose a new password:" %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
{% endblock %}
{% trans "Your username, in case you've forgotten:" %} {{ user.get_username }}

{% trans "Thanks for using our site!" %}

{% blocktrans %}The {{ site_name }} team{% endblocktrans %}

{% endautoescape %}

并将第 6 行替换为以下内容:

{{ protocol }}://{{ domain }}/user_details/reset/{{uid}}/{{token}}

与我的 urls.py 匹配。

现在确实有效...

【讨论】:

    【解决方案2】:

    您定义了一个接受“uidb36”参数的 URL,但反向调用传递的是“uidb64”。

    【讨论】:

    • 谢谢这是我的疏忽,但这并没有解决问题。
    • 真的吗?然后发生了一些你没有表现出来的事情。您如何包含您显示的那些网址?
    • 不太确定我是否理解这个问题。我使用 django.conf.urls 导入 url,patters,include urlpatterns = [...]
    猜你喜欢
    • 2015-04-09
    • 2018-07-18
    • 2019-08-26
    • 2014-11-20
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多