url '^/accounts/password/reset/$'
指向django.contrib.auth.views.password_reset
,并在上下文中添加我的模板文件名,但我认为需要发送更多上下文细节。我需要确切地知道为每个密码重置和更改视图添加哪些上下文。
RequestContext
。总之,你可以使用上下文处理器来修改上下文,这可能允许你注入所需的信息。
有一个关于上下文处理器的好的介绍。
编辑(我似乎对实际问题感到困惑):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'}),
...
)
当URL匹配'/accounts/password/reset'
并且关键字参数template_name = 'my_templates/password_reset.html'
被调用时,django.contrib.auth.views.password_reset
将被调用。
否则,由于password_reset
视图会自行处理,所以您不需要提供任何上下文。如果您想查看可用的上下文,可以触发TemplateSyntax
错误,并查找带有名为context
的局部变量的帧的堆栈跟踪。如果您想修改上下文,那么上面提到的上下文处理器可能是正确的方法。
总之,要如何使用自己的模板?在调用视图时提供template_name
关键字参数。您可以通过在URL模式元组的第三个成员中包含一个字典来向视图提供关键字参数。
registration/password_reset_email.html
实际包含HTML元素,比如<div>
、<a>
,因为目前只发送文本。 - mabdrabo强烈推荐这篇文章。
我只是插上它,它就工作了。
http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
你只需要包装现有的函数并传入你想要的模板即可。例如:
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
另一种也许更简单的解决方案是将您的覆盖模板目录添加到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_app/templates/registration/password_reset_form.html
password_reset
视图的参数即可。 - jb.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")
context
并不是你要找的正确答案! - jb.