在django 1.11中覆盖管理模板

11 浏览
0 Comments

在django 1.11中覆盖管理模板

我无法让Django 1.11接受一个新的base_site.html文件:\n按照文档和一些帖子的说法,我将文件复制到了以下位置:\nBASE_DIR/templates/base_site.html 和 BASE_DIR/templates/admin/base_site.html\n在settings.py文件中:\n

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'loaders': (
                 'django.template.loaders.filesystem.Loader',
                 'django.template.loaders.app_directories.Loader',
            ),
        },
    },
]

\n我尝试将文件放置在templates和templates/admin文件夹中:\n

>>> print ( os.path.isfile((os.path.join(settings.BASE_DIR, 'templates', 'admin','base_site.html'))) )
True
>>> print ( os.path.isfile((os.path.join(settings.BASE_DIR, 'templates', 'base_site.html'))) )
True

0
0 Comments

在Django 1.11中,要覆盖Django admin的base_site.html模板,需要添加自定义的base_site.html文件,并将其路径设置为BASE_DIR/templates/admin/base_site.html。这是我最初的猜想,但我尝试过了,不确定正确的设置是什么,以使其工作。

有人在这个post中详细解释了这个问题,请查看这个post。还请查看这个方法

解决方法:在项目的BASE_DIR路径下,创建一个templates文件夹,在templates文件夹下创建一个admin文件夹,并在admin文件夹内添加base_site.html文件,覆盖原有的Django admin的base_site.html模板。

0
0 Comments

问题的原因是在Django 1.11版本中,覆盖(admin)模板的方法发生了变化。在此版本中,如果想要覆盖admin模板,需要安装django-apptemplates,并将它作为一个加载器添加到settings.py文件中。同时,需要将APP_DIRS设置为False才能使这个方法生效。

解决方法是首先安装django-apptemplates库,然后在settings.py文件中的TEMPLATES列表中添加apptemplates.Loader作为加载器。具体修改如下:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [PROJECT_DIR],
        'APP_DIRS': False,
        'OPTIONS': {
            'loaders': [
                # 添加加载器
                'apptemplates.Loader',
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

需要注意的是,为了使这个方法生效,APP_DIRS必须设置为False。

0
0 Comments

在Django 1.11中,如果要覆盖管理界面(admin)的模板文件,必须将文件存在于templates文件夹下的admin文件夹中。具体文件路径如下所示:

your_project

├── your_project/

├── myapp/

├── templates/

│ └── admin/

│ └── base_site.html

其中,base_site.html文件的名称必须与原始admin文件夹中的文件名称相同。base_site.html文件的内容如下:

{% extends "admin/base.html" %}

# 在这里可以进行修改

根据文档和上述代码,我期望这样可以正常工作。但是,Django似乎并没有使用这个文件。

问题在于:我本来期望它能按照你描述的方式工作。但是该文件确实位于那个位置(参见上述打印输出),并且以{% extends开头(它是一个带有标题和品牌块修改的副本)。但是Django似乎没有使用它。

请检查你的应用程序文件夹,可能存在base_site.html文件。你不能在其他文件夹中有相同的文件,否则它会覆盖你自定义的admin base_site.html文件。

0