Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:覆盖每个应用程序而不是每个项目的“无法覆盖”管理模板?_Django_Templates_Django Admin_Django Templates_Overriding - Fatal编程技术网

Django:覆盖每个应用程序而不是每个项目的“无法覆盖”管理模板?

Django:覆盖每个应用程序而不是每个项目的“无法覆盖”管理模板?,django,templates,django-admin,django-templates,overriding,Django,Templates,Django Admin,Django Templates,Overriding,Django文件明确说明了以下内容: 并非每个应用程序或每个模型都可以覆盖contrib\admin\templates\admin中的每个模板 然后,它列出了可以的,base.html、base_site.html和index.html——我感兴趣的——不在这些列表中。它们可以被每个项目覆盖,但不能被每个应用覆盖 我的问题是:有没有一种方法不涉及在django.contrib.admin中编辑代码?我愿意考虑一些解决方案:我真的希望我的应用程序在其templates目录中有这三个文件的自定义版

Django文件明确说明了以下内容:

并非每个应用程序或每个模型都可以覆盖contrib\admin\templates\admin中的每个模板

然后,它列出了可以的,base.html、base_site.html和index.html——我感兴趣的——不在这些列表中。它们可以被每个项目覆盖,但不能被每个应用覆盖

我的问题是:有没有一种方法不涉及在django.contrib.admin中编辑代码?我愿意考虑一些解决方案:我真的希望我的应用程序在其templates目录中有这三个文件的自定义版本,并让使用该应用程序的每个项目都使用这些文件

我感兴趣的原因是,我正在创建一个大型的、可重用的应用程序,它有一个高度定制的管理界面,而每个项目对核心模板的覆盖并不是最好的解决方案,因为我必须将定制模板复制到应用程序使用的每个项目的模板目录中。发布新版本的应用程序,并对这些核心模板进行新的修改,意味着将所有内容重新复制到受影响的项目中。啊

我理解决策背后的原因,即每个应用程序只能覆盖少数几个模板;毕竟,如果可以覆盖所有应用程序,那么哪个应用程序的被覆盖管理员会优先

但就我而言,该应用程序将是多个客户端项目的核心,而这些项目中的其他应用程序仅起辅助作用

基于CSS的现有模板定制目前为止只能做到这一点,除非绝对必要,否则我不敢依赖JavaScriptDOM操作解决方案

想到的一个解决方案是将自定义base.html等模板放在appname/templates/admin/中,然后将它们符号链接到项目的templates文件夹。这样,应用程序的任何更新都将在项目级别自动生效


如果没有更好的建议,符号链接可能是我选择的方法,但我想听听是否有人有更好的解决方案。

正如我所见,您的目标是覆盖整个项目的模板,而不是应用程序或模型,但您不想将模板放在项目的模板文件夹中

所以你应该在“your_app/templates/admin”文件夹中创建“base.html”等。 接下来,您必须告诉django,模板不仅应该从项目的模板文件夹加载,还应该从应用程序的文件夹加载。 这可以使用settings.py文件smth中的TEMPLATES_DIR变量来完成。就像这样:

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'),
    os.path.join(PROJECT_PATH, 'my_app','templates'),
)

PROJECT_PATH=os.PATH.abspaths.PATH.dirnamefile我的应用程序不在PROJECT_PATH内,但在其他方面,这看起来是一个干净的解决方案。谢谢