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