如何覆盖 Django 的管理更改密码页面?

问题描述 投票:0回答:3

我想覆盖 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
),但到目前为止,管理模板更改微不足道,我很惊讶这个文件没有遵循套装。

有什么想法吗?

django django-admin
3个回答
22
投票

您必须使用:

templates/registration/password_change_form.html

如果您仍然看到 Django 的管理模板,则必须更改

INSTALLED_APPS
的顺序(例如,如果您的模板位于某个应用程序内,则该应用程序必须出现在
django.contrib.admin
中的
INSTALLED_APPS
之前)

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


10
投票

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

/templates/registration/password_change_form.html

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


1
投票

我也遇到了同样的问题;我相信它必须完成 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 目录。

© www.soinside.com 2019 - 2024. All rights reserved.