我有一个非常奇怪的问题,我真的不明白。
我正在使用django-registragion-redux
以及该软件包提供的几乎未更改的login.html
模板。
我的urls.py
文件如下:
urlpatterns = [
url(r'^', include('main_site.urls', namespace='main'), name='main'),
url(r'^accounts/', include('registration.backends.default.urls')),
url(r'^admin/', include(admin.site.urls))
]
模板templates/registration/login.html
包含两条相关的行以及填充符:
<p>{% trans "Not a member?" %} <a href="{% url 'registration_register' %}">{% trans "Register now!" %}</a>.</p>
<p>{% trans "Forgot your password?" %} <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a>.</p>
使用这些设置,一切都很好。我转到http://127.0.0.1:8000/accounts/login/,基本站点就在那里,链接设置正确。
但是,我希望有一个更干净的代码,并建议使用命名空间。好的,没问题。我将我的网址更改为
urlpatterns = [
url(r'^', include('main_site.urls', namespace='main'), name='main'),
url(r'^accounts/', include('registration.backends.default.urls', namespace='accounts')),
url(r'^admin/', include(admin.site.urls))
]
我将模板更改为
<p>{% trans "Not a member?" %} <a href="{% url 'accounts:registration_register' %}">{% trans "Register now!" %}</a>.</p>
<p>{% trans "Forgot your password?" %} <a href="{% url 'accounts:auth_password_reset' %}">{% trans "Reset it" %}</a>.</p>
现在,当我打开页面http://127.0.0.1:8000/accounts/login/时,收到以下错误消息:
NoReverseMatch at /accounts/login/
Reverse for 'auth_password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/login/
Django Version: 1.8.3
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'auth_password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
现在这很奇怪有两个原因:
accounts:registration_register
标记得到了很好的反转。如果我只保留文件中的第二段,则没有错误。auth_password_reset_done
的反向,但模板中没有提及 auth_password_reset_done
!实际上发生了错误,试图撤消auth_password_reset
!答案 0 :(得分:2)
问题在于django-registration-redux
会反转registration/auth_urls中的某些网址。由于没有使用命名空间,因此反转URL失败。
有两种可能的解决方法:
而不是urls.py
中的auth_urls.py
(以及隐含django-registration-redux
},请将它们复制到您的项目中并修复对reverse_lazy
的调用
fork django-registration-redux
,解决问题并提交拉取请求