Python 如何将内置密码重置/更改视图与自己的模板一起使用
例如,我可以使用上下文中的模板文件名将Python 如何将内置密码重置/更改视图与自己的模板一起使用,python,django,passwords,Python,Django,Passwords,例如,我可以使用上下文中的模板文件名将url'^/accounts/password/reset/$'指向django.contrib.auth.views.password\u reset,但我认为需要发送更多上下文详细信息 我需要确切地知道要为每个密码重置和更改视图添加什么上下文。表示只有一个上下文变量,form 如果您在登录时遇到问题(这很常见),则说明有三个上下文变量: 表单:表示登录表单的表单对象。有关表单对象的详细信息,请参阅表单文档 next:成功登录后重定向到的URL。这也可能
url'^/accounts/password/reset/$'
指向django.contrib.auth.views.password\u reset
,但我认为需要发送更多上下文详细信息
我需要确切地知道要为每个密码重置和更改视图添加什么上下文。表示只有一个上下文变量,form
如果您在登录时遇到问题(这很常见),则说明有三个上下文变量:
:表示登录表单的表单对象。有关表单对象的详细信息,请参阅表单文档表单
:成功登录后重定向到的URL。这也可能包含查询字符串next
:根据site\u ID设置,当前站点的名称site\u name
password\u reset
采用一个名为template\u name
的命名参数:
def password_reset(request, is_admin_site=False,
template_name='registration/password_reset_form.html',
email_template_name='registration/password_reset_email.html',
password_reset_form=PasswordResetForm,
token_generator=default_token_generator,
post_reset_redirect=None):
查看更多信息
。。。因此,使用URL.py类似于:
from django.conf.urls.defaults import *
from django.contrib.auth.views import password_reset
urlpatterns = patterns('',
(r'^/accounts/password/reset/$', password_reset, {'template_name': 'my_templates/password_reset.html'}),
...
)
django.contrib.auth.views.password\u reset
将为匹配'/accounts/password/reset'
和关键字参数template\u name='my\u templates/password\u reset.html'
的URL调用
否则,您不需要提供任何上下文,因为password\u reset
视图会自行处理。如果要查看可用的上下文,可以触发TemplateSyntax
错误,并通过堆栈跟踪查找名为context
的局部变量的帧。如果您想修改上下文,那么我上面所说的关于上下文处理器的内容可能是一个不错的选择
总之:使用自己的模板需要做什么?调用视图时,为视图提供一个
template\u name
关键字参数。通过将字典作为URL模式元组的第三个成员,您可以向视图提供关键字参数。您只需包装现有函数并传入所需的模板。例如:
from django.contrib.auth.views import password_reset
def my_password_reset(request, template_name='path/to/my/template'):
return password_reset(request, template_name)
要了解这一点,只需查看内置视图的函数declaration:
强烈推荐这篇文章 我刚插上电源,它就工作了
我在url和管理员模板中使用了这两行,我正在根据需要更改内容
url(r'^change-password/$', 'django.contrib.auth.views.password_change', {
'template_name': 'password_change_form.html'}, name="password-change"),
url(r'^change-password-done/$', 'django.contrib.auth.views.password_change_done', {
'template_name': 'password_change_done.html'
}, name="password-change-done")
您可以执行以下操作:
另一个可能更简单的解决方案是将覆盖模板目录添加到settings.py中TEMPLATES设置的DIRS条目中。(我认为这个设置在Django 1.8中是新的。它可能在以前的Django版本中被称为TEMPLATE_DIRS。) 像这样:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# allow overriding templates from other installed apps
'DIRS': ['my_app/templates'],
'APP_DIRS': True,
}]
然后将覆盖模板文件放在
my_app/templates
下。因此,被覆盖的密码重置模板将是my\u app/templates/registration/password\u reset\u form.html
我相信问题在于如何使用不同的模板和内置视图-上下文处理程序不包括在内!你知道如何让注册/password\u reset\u email.html
实际上包含如下html元素:
,
,因为这样会发送文本only@mabdrabo-查看如何使HTML工作。文档中说有一个名为“模板名称”的“可选参数”这似乎更相关。可选参数是函数的参数,没有为表单提供上下文。Mmm-我认为这个问题令人困惑,因为它谈论的是“上下文”,而真正与解决这个问题相关的是密码重置
视图的参数。鉴于这个问题的标题,我认为上下文
不是您要找的正确的东西!我要确认的是,“context”指的是额外数据字典,它是url行的第三个参数。又名额外数据或。很抱歉造成混淆,请编辑问题,任何人都可以。这不是最简单的方法。您可以将字典作为URL模式元组的第三部分传入,或者,如果您觉得确实必须包装该函数,可以使用:password\u reset=functools.partial(password,template\u name=“path/to/my/template”)伟大的链接,谢谢。对于那些遵循链接的人来说,django注册现在包括默认的auth视图…所以你所要做的就是创建上面链接中详细介绍的模板。另外,如果你想避免使用django crispy表单,那么也可以使用django crispy表单。我在工作中需要管理一些django遗留代码,但我对框架几乎一无所知。那家伙救了我的命!非常好的教程谢谢你的链接!我认为这应该是公认的答案,因为正如你所说,插上电源,它就工作了。