由于缺少自定义存在模板,`registration / password_reset_email.html`未呈现

时间:2017-11-01 20:01:52

标签: python django

我正在尝试为我的应用程序创建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)),
]

1 个答案:

答案 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'),