当前位置:  开发笔记 > 编程语言 > 正文

如何使用我自己的模板使用内置密码重置/更改视图

如何解决《如何使用我自己的模板使用内置密码重置/更改视图》经验,为你挑选了4个好方法。

例如,我可以点url '^/accounts/password/reset/$'django.contrib.auth.views.password_reset我的背景下,模板文件名,但我认为需要派遣更多的上下文信息.

我需要确切地知道为每个密码重置和更改视图添加的上下文.



1> Aaron Maenpa..:

如果你看一下django.contrib.auth.views.password_reset的来源,你会看到它使用的RequestContext.结果是,您可以使用上下文处理器来修改上下文,这可能允许您注入所需的信息.

b-list 对上下文处理器有很好的介绍.

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

你会注意到password_reset一个名为的参数template_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):

检查password_reset以获取更多信息.

...因此,使用urls.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_reset将调用'/accounts/password/reset'与关键字参数匹配的URL template_name = 'my_templates/password_reset.html'.

否则,您不需要提供任何上下文,因为password_reset视图会自行处理.如果要查看可用的上下文,可以触发TemplateSyntax错误并查看堆栈跟踪,找到名为local变量的框架context.如果你想修改上下文,那么我上面提到的有关上下文处理器的内容可能就是这样.

总结:您需要做什么才能使用自己的模板?template_name在调用视图时为视图提供关键字参数.您可以通过将字典包含为URL模式元组的第三个成员来为视图提供关键字参数.


任何想法,如何让`registration/password_reset_email.html`实际上包含html元素,如:`
`,``因为这只发送文本

2> Alex Stewart..:

强烈推荐这篇文章.

我只是将其插入并且工作正常

http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html


很棒的链接,谢谢.对于那些关注链接的人 - django-registration现在包含默认的身份验证视图...所以你要做的就是创建上面链接中详述的模板.另外 - 如果你想避免他所做的所有手工html表单工作,请使用django-crispy-forms.

3> jb...:

您只需要包装现有函数并传入所需的模板.例如:

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)

要看到这个,只需看看内置视图的函数声明:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74


这不是最简单的方法.您可以将字典作为URL模式元组的第三部分传入,或者如果您认为必须包装该函数,则可以使用:password_reset = functools.partial(password,template_name ="path/to/my/template" )

4> Lodato L..:

您可以执行以下操作:

    添加到您的urlpatterns(r'​​^/accounts/password/reset/$',password_reset)

    将您的模板放在'/templates/registration/password_reset_form.html'中

    让您的应用程序在INSTALLED_APPS中的'django.contrib.auth'之前

说明:

加载模板后,将在settings.py中的INSTALLED_APPS变量中搜索它们.订单由INSTALLED_APPS中的定义排名决定,因此您的应用程序位于'django.contrib.auth'之前,您的模板已加载(参考:https://docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader).

方法的动机:

    我想要更干,不要重复任何视图(由django定义)模板名称(它们已经在django中定义)

    我想要一个最小的url.py.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有