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



我正在尝试为我的应用程序创建password_reset_confirm视图。但是我不断收到此错误:

这个问题是关于password_reset_confirm问题,该问题是由于命名空间exist阻止呈现默认模板registration/password_reset_email.html而引起的,而上一个问题是关于password_reset_done问题,该问题是由于缺少改进的post_reset_redirect变量引起的,该变量占命名空间exist

这是我的代码:

应用 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的 url 映射

项目 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)),
]

默认registration/password_reset_email.html'包括:

{% url 'password_reset_confirm' uidb64=uid token=token %}

这不起作用,因为您使用的是 exist 命名空间。

从包含中删除命名空间将是最简单的解决方案。如果必须保留命名空间,则需要创建自己的模板,该模板使用:

{% url 'exist:password_reset_confirm' uidb64=uid token=token %}

你有两个选项可以让 Django 使用你的自定义模板。第一个选项是使用默认模板名称 registration/password_reset_email.html ,并确保包含模板的应用程序高于INSTALLED_APPS中的django.contrib.admin

另一种选择是选择您自己的模板名称(例如 exist/password_reset_email.html ),并在 URL 模式中指定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'),

相关内容

最新更新