html - 如何覆盖 password_reset HTML 模板
问题描述
我要做的是覆盖 django 用于 password_reset、password_reset_done、password_reset_confirm 和 password_reset_complete 的默认 HTML 模板。当我向第一个 URL (password_reset) 添加自定义模板时,它实际上运行良好。我可以键入与用户关联的电子邮件并继续进行重置过程,但是当我尝试为 password_reset_done 视图添加自定义模板时,password_reset 视图不再起作用,并且出现以下错误:
Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name.
这是我的 urls.py:
from django.conf.urls import url
# imports for views at a gloabl level (aka other django apps)
from . import views
from django.contrib.auth.views import (
login,
logout,
password_reset,
password_reset_done,
password_reset_confirm,
password_reset_complete
)
urlpatterns = [
url(r'^$', views.home),
url(r'^login/$', login, {'template_name': 'accounts/login.html'}),
url(r'^logout/$', logout, {'template_name': 'accounts/logout.html'}),
url(r'^register/$', views.register, 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': 'accounts/reset_password.html'}),
url(r'^reset-password/done/$', password_reset_done, {'template_name': 'accounts/password_reset_done.html'}),
url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
password_reset_confirm, {'template_name': 'accounts/password_reset_confirm.html'}),
url(r'^reset-password/complete/$', password_reset_complete, {'template_name': 'accounts/password_reset_complete.html'})
]
注意:如果我用正确的 name='password_reset_done, name='password_reset_confirm', name='password_reset_complete' 参数替换 password_reset_done 和所有其他参数,一切正常,但是我坚持使用默认模板。
这是 urls.py 的功能:
urlpatterns = [
url(r'^$', views.home),
url(r'^login/$', login, {'template_name': 'accounts/login.html'}),
url(r'^logout/$', logout, {'template_name': 'accounts/logout.html'}),
url(r'^register/$', views.register, 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': 'accounts/reset_password.html'}),
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, name='password_reset_confirm'),
url(r'^reset-password/complete/$', password_reset_complete, name='password_reset_complete')
]
只有第一个模板可以更改而不会导致任何错误。我对 django 还是比较陌生,我在文档中没有找到任何可以帮助我解决这个问题的东西。
我将在下面留下其他可能重要的代码
来自settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
非常感谢任何见解。
解决方案
您需要为这些 URL 添加名称,就像您为自己的 URL 添加名称一样。例如:
url(r'^reset-password/done/$', password_reset_done, {'template_name': 'accounts/password_reset_done.html'}, name='password_reset_done'),
推荐阅读
- mysql - 比较两个表的所有字段并从mysql中的第一个表中获取不匹配的记录
- html - 页脚不会显示在带有容器的路线下方
- amazon-web-services - 应用 AWS eb 命令时出错
- javascript - D3.js 使用无序列表旋转饼图
- c - 如何使用 MPI 解决 C 中的“malloc():内存损坏”
- python - Python 迭代器类总是返回字典对象的初始状态。为什么?
- java - JavaFX - 切换阶段和新阶段的 setX 和 setY
- javascript - 如何使用大写和数字的正则表达式验证匹配密码并确认密码
- android - 如何使用 Provider 在两个小部件之间共享数据?
- tensorflow.js - 安装 tensorflow/tfjs-node 时出现 sysmlink 错误