我正在尝试为我的应用程序创建password_reset_confirm视图。但是我一直收到这个错误:
这个问题是关于password_reset_confirm问题,这是由于命名空间exist
阻止呈现默认模板registration/password_reset_email.html
这一事实造成的,而上一个问题是关于导致的password_reset_done问题缺少改进的post_reset_redirect
变量,该变量占名称空间exist
这是我的代码:
app urls.py
from django.conf.urls import url
from . import views
from django.contrib.auth.views import login, logout, password_reset, password_reset_done, password_reset_confirm, password_reset_confirm
urlpatterns = [
url(r'^$', views.vedic_view, name = 'vedic_home_view'),
url(r'^login/$', login, {'template_name' : 'exist/login.html'}, name = 'login'),
url(r'^logout/$', logout, {'template_name' : 'exist/logout.html'}, name = 'logout'),
url(r'^register/$', views.register_view, name = 'register'),
url(r'^profile/$', views.view_profile, name = 'view_profile'),
url(r'^profile/edit/$', views.edit_profile, name = 'edit_profile'),
url(r'^change-password/$', views.change_password, name = 'change_password'),
url(r'^reset-password/$', password_reset, { 'template_name' : 'exist/reset_password.html', 'post_reset_redirect': 'exist:password_reset_done' }, name = 'reset_password'),
url(r'^reset-password/done/$', password_reset_done, name = 'password_reset_done'),
url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', password_reset_confirm, {'post_reset_redirect': 'exist:password_reset_complete'}, name = 'password_reset_confirm')
]
主urls.py中的命名空间变量似乎正在影响password_reset_confirm
的网址映射
项目urls.py
from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
from django.conf.urls import include
from django.views.generic import RedirectView
urlpatterns += [
url(r'^exist/', include('exist.urls', namespace = 'exist' )),
url(r'^$', RedirectView.as_view(url='/exist/', permanent=True)),
]
答案 0 :(得分:0)
默认registration/password_reset_email.html'
包括:
{% url 'password_reset_confirm' uidb64=uid token=token %}
这不起作用,因为您使用的是exist
命名空间。
从include中删除命名空间是最简单的解决方案。如果必须保留命名空间,则需要创建自己的模板,使用:
{% url 'exist:password_reset_confirm' uidb64=uid token=token %}
您可以通过两种方式让Django使用您的自定义模板。第一个选项是使用默认模板名称registration/password_reset_email.html
,并确保包含该模板的应用高于django.contrib.admin
中的INSTALLED_APPS
。
另一个选择是选择您自己的模板名称(例如exist/password_reset_email.html
),并在您的网址格式中指定email_template_name
:
url(r'^reset-password/$', password_reset, { 'template_name' : 'exist/reset_password.html', 'post_reset_redirect': 'exist:password_reset_done', 'email_template_name': 'exist/password_reset_email.html' }, name = 'reset_password'),