【问题标题】:How do I override Django's administrative change password page?如何覆盖 Django 的管理更改密码页面?
【发布时间】:2010-10-01 15:25:19
【问题描述】:

我想覆盖 Django 的管理“更改密码”页面 (change_password.html)。因此,我已将 Django 的“/contrib/admin/templates/registration/password_change_form.html”放在项目的“/templates/admin/registration/password_change_form.html”目录中。不幸的是,这似乎不起作用。

在这一点上,我很难过。我猜它与 Django 的 /contrib/auth/urls.py 文件有关(它将管理员更改密码调用指向“django.contrib.auth.views.password_change”),但管理模板更改是微不足道的到目前为止,我很惊讶这个没有效仿。

有什么想法吗?

【问题讨论】:

  • 你的 settings.TEMPLATE_DIRS 是什么样的?
  • 它有“'./templates'”。我不确定那是问题所在。我有一个“/templates/admin”目录,它没有在 TEMPLATE_DIRS 中明确定义

标签: django django-admin


【解决方案1】:

快速查看源代码表明您应该将模板放置在:

/templates/registration/password_change_form.html

注意:这里没有“admin/”。

【讨论】:

  • 您在哪里看到了解决方案?我一定忽略了它。
  • 我阅读了源代码。当然,在第二次通过时,我在 Djanog 文档中找到了 docs.djangoproject.com/en/dev/topics/auth/…
  • 查看django/contrib/auth/views.py中函数password_change的参数列表
  • 什么都不需要看,只看路径本身。文件的原始位置中的“templates/”后面没有“admin/”,为什么要添加一个并期望它可以工作?
  • 这是不正确的。内置 contrib.admin 在该确切位置有一个模板,它将覆盖您的自定义项目/应用程序中任何类似命名的模板。
【解决方案2】:

你必须使用:

templates/registration/password_change_form.html

如果您仍然看到 Django 的 Admin 模板,您必须更改您的 INSTALLED_APPS 的顺序(例如,如果您的模板在某个应用程序中,则此应用程序必须出现在 @987654325 中的 django.contrib.admin 之前@)

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.password_change

【讨论】:

  • 不知道你为什么被否决,这就是我正在寻找的答案。问题解决了!
  • 提示 此应用必须出现在 INSTALLED_APPS 中的 django.contrib.admin 之前 非常有帮助!
  • 虽然这条评论很旧,但它仍然是一个救生员;)+1 提到秩序的重要性
【解决方案3】:

我遇到了同样的问题;我相信这与 django 模板加载器的工作方式有关。

如果你正在使用类似的东西

TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)

类似的东西 模板目录 = ( os.path.join(PROJECT_DIR, '模板'), )

然后您会期望(其中 localstore 是本地 satchmo 覆盖的名称)localstore/templates/registration/password_change_form.html 会起作用。但是,它不适用于 password_change_form,因为管理员正在覆盖它。所以,它是这样的:

  1. 文件加载器模板目录(例如模板)
  2. (django 管理模板)
  3. 本地应用模板目录

因此,我的解决方案是将我的注册模板覆盖从我的 localstore/templates 目录移动到项目的 /templates 目录。

【讨论】: