【问题标题】:Django 1.6 Admin Page Overriding Not WorkingDjango 1.6 管理页面覆盖不起作用
【发布时间】:2015-10-06 12:03:06
【问题描述】:

我们正在尝试覆盖 Django 1.6 的管理页面,但它继续从 django/contrib/templates/... 获取它:

settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                [os.path.join(BASE_DIR, 'templates')],
            ],
            'OPTIONS': {
                'context_processors': [
                    # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                    # list if you haven't customized them:
                    'django.contrib.auth.context_processors.auth',
                    'django.template.context_processors.debug',
                    'django.template.context_processors.i18n',
                    'django.template.context_processors.media',
                    'django.template.context_processors.static',
                    'django.template.context_processors.tz',
                    'django.contrib.messages.context_processors.messages',
                ],
                'loaders': [
                    # insert your TEMPLATE_LOADERS here
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ]
            },
        },
    ]
]

以及文件结构:

project
  project 
    templates
      app_name
      admin 
        file_to_override <--it varies here from being inside the app_name or inside template itself

我不确定为什么目录不起作用

【问题讨论】:

  • 尝试将您的自定义注册模板放入registration 文件夹中。它应该在您当前的templates 文件夹中。 (您可以尝试在模板中将 admin 文件夹重命名为 registration)。
  • 管理页面使用 loader.py 工作,它要求 admin/index.html;我正在为该路径获取 TemplateDoesNotExist,因为我试图远离给定的模板;测试我是否从该文件夹中取出 django/contrib/templates 以查看它是否会拾取我放置在那里的那些。
  • 尝试将app_directories 放在文件系统加载器上方的TEMPLATE_LOADERS 中,以便首先加载它
  • 这似乎没有任何改变

标签: django django-templates django-admin


【解决方案1】:

我不知道您为什么使用 Django 1.6,但您引用的 TEMPLATES dict 语法仅适用于 Django 1.8+。在以前的版本中,您需要单独指定所有选项。

另请注意,您错误地将 DIRS 值用 两个列表括号括起来。

   TEMPLATE_DIRS = [
        os.path.join(BASE_DIR, 'templates'),
   ]
   TEMPLATE_CONTEXT_PROCESSORS = [
            'django.contrib.auth.context_processors.auth',
            'django.template.context_processors.debug',
            'django.template.context_processors.i18n',
            'django.template.context_processors.media',
            'django.template.context_processors.static',
            'django.template.context_processors.tz',
            'django.contrib.messages.context_processors.messages',
        ]
        TEMPLATE_LOADERS = [
            # insert your TEMPLATE_LOADERS here
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',
        ]

【讨论】:

  • 啊,我不确定它是否纯粹是 1.8 的东西。这是一个我们正在使用 1.6 的旧项目——但是它是你之前建议的格式,当我改回来时,它不起作用,也不起作用,
  • 请检查我提到的双重列表。
  • 是的,我也解决了这个问题