【发布时间】:2010-11-01 13:26:12
【问题描述】:
Django 文档清楚地说明了以下内容:
并非每个应用程序或每个模型都可以覆盖 contrib\admin\templates\admin 中的每个模板。
然后它会列出那些可以的,而base.html、base_site.html 和index.html——我感兴趣的那些——不在列出的范围内。它们可以被每个项目覆盖,但不能被每个应用覆盖。
我的问题是:有没有一种不涉及编辑 django.contrib.admin 中的代码的方法?我愿意考虑一些猴子补丁解决方案:-)。我真的希望我的应用程序在其 templates 目录中拥有这三个文件的自定义版本,并让使用该应用程序的每个项目都使用这些文件。
我感兴趣的原因是我正在创建一个具有高度自定义管理界面的大型可重用应用程序,并且每个项目覆盖“核心”模板并不是最好的解决方案,因为我有将自定义模板复制到使用该应用程序的每个项目的模板目录中。发布对这些核心模板进行新修改的应用程序的新版本意味着将所有内容重新复制到受影响的项目中。呃。
我理解决定只为每个应用程序覆盖少数几个模板的原因;毕竟,如果可以覆盖所有这些,那么哪个应用程序的覆盖管理员会优先?
但就我而言,该应用程序将成为多个客户项目的“核心”,而这些项目中的其他应用程序只是起辅助作用。
对现有模板的基于 CSS 的自定义仅能帮助您到目前为止,除非绝对必要,否则我会犹豫是否依赖 JavaScript DOM 操作解决方案。
想到的一个解决方案是将自定义 base.html 等模板放在 appname/templates/admin/ 中,然后将它们符号链接到项目的模板文件夹。这样,对应用的任何更新都会自动在项目级别生效。
如果没有更好的建议,符号链接可能是我选择的方法,但我想听听是否有人有更好的解决方案。
【问题讨论】:
标签: django templates django-admin django-templates overriding