Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将内置密码重置/更改视图与自己的模板一起使用_Python_Django_Passwords - Fatal编程技术网

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

如果您在登录时遇到问题(这很常见),则说明有三个上下文变量:

  • 表单
    :表示登录表单的表单对象。有关表单对象的详细信息,请参阅表单文档
  • next
    :成功登录后重定向到的URL。这也可能包含查询字符串
  • site\u name
    :根据site\u ID设置,当前站点的名称

如果你看一下源代码,你会发现它使用了。结果是,您可以使用上下文处理器来修改上下文,从而可以插入所需的信息

b-list有一个很好的例子

编辑(我似乎对实际问题感到困惑):

您会注意到,
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")

您可以执行以下操作:

  • 添加到您的URL模式(r'^/accounts/password/reset/$',password\u reset)
  • 将模板放入“/templates/registration/password\u reset\u form.html”中
  • 在已安装的应用程序中,将应用程序置于“django.contrib.auth”之前
  • 说明:

    加载模板后,将在settings.py中的已安装的_APPS变量中搜索模板。 顺序由定义在已安装应用程序中的排名决定,因此,由于您的应用程序位于“django.contrib.auth”之前,因此已加载您的模板(参考:)

    方法的动机:

  • 我希望更加干爽,不要对任何视图(由django定义)重复模板名称(它们已经在django中定义)
  • 我想要一个最小的url.py

  • 另一个可能更简单的解决方案是将覆盖模板目录添加到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遗留代码,但我对框架几乎一无所知。那家伙救了我的命!非常好的教程谢谢你的链接!我认为这应该是公认的答案,因为正如你所说,插上电源,它就工作了。