首页 > 解决方案 > 仅对一个 Image 应用使用修改后的管理模板

问题描述

Django 3.0.6

对于一个模型,我需要一个修改后的管理站点模板。

即,我想修改这个模板:

admin/includes/fieldset.html

我从 Django 包目录中复制了 fieldset.html 并将其放置如下:

/my_project/image/templates/admin/includes/fieldset.html

这里的图像是我的应用程序。正是这个应用程序需要修改后的管理模板。

问题是所有其他模型也得到这个模板。并且使用的模板过滤器没有收到必要的参数并爆炸。

文档:https ://docs.djangoproject.com/en/3.0/ref/contrib/admin/#set-up-your-projects-admin-template-directories

好吧,我很困惑,无法组织必要的目录结构。

如何仅将修改后的模板用于一个 Image 应用程序?

标签: djangodjango-templates

解决方案


你有几个问题。首先,每个应用程序或每个模型只能覆盖以下模板

  • actions.html
  • app_index.html
  • change_form.html
  • change_form_object_tools.html
  • change_list.html
  • change_list_object_tools.html
  • change_list_results.html
  • date_hierarchy.html
  • delete_confirmation.html
  • object_history.html
  • pagination.html
  • popup_response.html
  • prepopulated_fields_js.html
  • search_form.html
  • submit_line.html

fieldset.html不在那里,因此您需要查看包含模板是否在此列表中,如果是,请替换模板并使用它来包含您自己的fieldset.html.

此外,您的位置(略有修改,因为无法覆盖每个应用程序包含的模板):/my_project/image/templates/admin/template.html不太正确。这将为每个应用程序覆盖该模板。要为每个应用程序执行此操作,您需要 admin 下的另一个子目录:

/my_project/image/templates/admin/image/template.html

这样做的原因是模板并不真正关心它们在哪个应用程序中,因此模板存在于您的image应用程序中这一事实对 Django 没有任何意义,将它们放在应用程序的子目录中的约定是只是为了避免覆盖您不打算覆盖的模板。


推荐阅读