仅针对某些模型覆盖 Django 管理员 change_list_results.html

Posted

技术标签:

【中文标题】仅针对某些模型覆盖 Django 管理员 change_list_results.html【英文标题】:Overriding the Django admin change_list_results.html only for some models 【发布时间】:2011-08-21 06:04:23 【问题描述】:

我只想为我的一个模型覆盖 templates/admin/change_list_results.html 和 templates/admin/change_list.html 模板。 如何告诉管理员将此模型与我的应用程序中的所有其他模型区分开来并呈现与默认不同的更改模板? 如果我只是编辑 change_list_results.html,那么管理视图中的所有模型都会反映我的更改。

【问题讨论】:

【参考方案1】:

您可以,请参阅文档here。

简短的版本是您需要在模板路径中的admin/your-app-name/your-model-name/change_list.html 处的自定义模板。它可以在应用程序中或在您的根模板目录中。

一个问题是 Django 需要先找到它,然后才能在 django.contrib.admin 中找到默认的“admin/change_list.html”。如果它在应用程序中,请确保该应用程序在INSTALLED_APPS之前 django.contrib.admin 列出。我通常只是将管理模板覆盖放在我的根模板文件夹中,因为它会在应用程序之前加载。

【讨论】:

这不适用于 change_list_results.html,因为它不支持 your-app-name/your-model-name 样式覆盖。【参考方案2】:

恕我直言,因为 change_list_results.html 是从 template_tag -> result_list 调用的。

https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/change_list.html#L91

https://github.com/django/django/blob/65cf82bd08631a7aa8d9dd007b2527476fa3304f/django/contrib/admin/templatetags/admin_list.py#L288

我想看看如果你覆盖或修改该模板标签会发生什么。但是导入顺序在这方面发挥了很大作用。

【讨论】:

以上是关于仅针对某些模型覆盖 Django 管理员 change_list_results.html的主要内容,如果未能解决你的问题,请参考以下文章

每个模型覆盖 django admin change_list_results.html

如何仅针对 1 个应用程序覆盖 django edit_inline/tabular.html?

如何覆盖自定义管理器类中的 .update() 方法

如何在Django中覆盖相关集的“add”方法

OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体

Django:覆盖保存(模型或管理部分)