Answers:
如果您查看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'}),
...
)
django.contrib.auth.views.password_reset
'/accounts/password/reset'
与关键字参数匹配的URL将被调用template_name = 'my_templates/password_reset.html'
。
否则,您无需提供任何上下文,因为password_reset
视图会自行处理。如果要查看可用的上下文,则可以触发TemplateSyntax
错误,并在堆栈跟踪中查找具有名为的局部变量的框架context
。如果您想修改上下文,那么我上面所说的关于上下文处理器的方法可能就是解决方法。
总结:使用自己的模板需要做什么?template_name
在调用视图时,为视图提供关键字参数。您可以通过将字典作为URL模式元组的第三个成员来为视图提供关键字参数。
registration/password_reset_email.html
实际上包含html元素,例如:<div>
,<a>
因为这仅发送文本
您只需要包装现有功能并传递所需的模板。例如:
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中的INSTALLED_APPS变量中搜索它们。该顺序由INSTALLED_APPS中定义的等级决定,因此,由于您的应用程序在“ django.contrib.auth”之前,因此您的模板已加载(参考:https : //docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader)。
进取动机:
另一个也许更简单的解决方案是将覆盖模板目录添加到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
该文档说只有一个上下文变量form
。
如果您在登录时遇到麻烦(这很常见),则文档会说明存在三个上下文变量:
form
:代表登录表单的Form对象。有关表单对象的更多信息,请参见表单文档。next
:成功登录后重定向到的URL。它也可能包含查询字符串。site_name
:根据SITE_ID设置,当前网站的名称。password_reset
。
我在管理员使用的网址和模板中使用这两行内容
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
您找不到合适的东西!