Django管理模板覆盖不起作用

时间:2016-10-10 18:36:41

标签: django django-models django-admin

Django 1.6.11

App结构如下:

my_project/
     |-- new_app/
     |-- templates/

在我的配置中:

TEMPLATE_ROOT = os.path.join(BASE_ROOT, 'templates/')
TEMPLATE_DIRS = (
    TEMPLATE_ROOT,
)
INSTALLED_APPS = (
    'django.contrib.admin',
    ...
    'new_app',
)

我还尝试在new_app之前列出contrib.admin,但没有帮助。

当我将venv/django/contrib/admin/templates/admin/change_list.html复制到我的/templates/admin/new_app/change_list.html时,我看不到我的自定义设置。

my_project/
     |-- new_app/
     |-- templates/
         |-- admin/
             |-- new_app/
                 |-- change_list.html

当我将change_list.html向上移动一级以使其位于管理路径下时,更改显示正常:

my_project/
     |-- new_app/
     |-- templates/
         |-- admin/
             |-- change_list.html
             |-- new_app/   (now an empty folder)

...但当然这意味着我的更改将影响每个管理页面,而不仅仅是我正在尝试修改的应用程序。

我已将此添加到应用程序在admin.py中的唯一模型:

class MyModelAdmin(reversion.VersionAdmin):
    change_list_template = 'admin/new_app/change_list.html'

...这给了我一些我需要的东西,但我也需要change_list_results.html,并且没有ModelAdmin覆盖。

我正在遵循第31页第2.4.8节readthedocs中找到的文档指南,但我似乎没有运气。

3 个答案:

答案 0 :(得分:8)

当多个应用程序提供相同资源的不同版本(模板,静态文件,管理命令,转换)时,INSTALLED_APPS中首先列出的应用程序具有优先权。见docs

变化:

INSTALLED_APPS = (
    'django.contrib.admin',
    ...
    'new_app',
)

要:

INSTALLED_APPS = (
    'new_app',
    'django.contrib.admin',
    ...
)

new_app中的模板现在应该在contrib.admin中的模板之前找到。

答案 1 :(得分:3)

您是否尝试在应用内使用模板文件夹?像这样:

my_project/
     |-- new_app/
         |-- templates/
             |-- new_app/
                 |-- admin/
                     |-- change_list.html
     |-- templates/

答案 2 :(得分:0)

转到第607页。

  

自定义模板选项 覆盖管理模板部分介绍了如何覆盖或扩展默认值   管理模板。使用以下选项覆盖ModelAdmin视图使用的默认模板:

在那里,您将获得如何使用ModelAdmin覆盖特定模型的模板的选项。

同样(我没有比较,但似乎相似)的文档可以在django网站上找到:Custom template options