Django覆盖管理模板

7

我正在跟随Django教程的第二部分。(链接) 我试图覆盖管理模板(base_site.html)

我将文件从django/contrib/admin/templates复制到mytemplates/admin/base_site.html

我也更新了settings.py:

#Base Directory
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

#Template directories
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'mytemplates'),)

我尝试将mytemplates文件夹放在项目文件夹的根目录以及mysite文件夹中,但都没有成功。希望能提供一些指引!

4个回答

13

编辑了先前用户的回答——这个方法有效:

我认为你指向模板目录的相对路径是错误的。

如果你按照以下步骤操作,应该会生效:(我自己已经测试过了)

  1. mytemplates 文件夹和 manage.py 文件放在同一级目录下

project
-app1
-app2
-mytemplates
    -admin
        -base_site.html
-manage.py
  • 将 TEMPLATE_DIRS 改为:

    TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'mytemplates'),)
    
  • 请确保模板加载器的顺序为:

    TEMPLATE_LOADERS = (
    
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    
    )
    

  • 2
    根据这个配置,admin不应该是mytemplates/的子目录吗? - bnjmn
    只要在 TEMPLATE_DIRS = (os.path.join ... 中使用正确的文件夹名称,这将有效运行。 - Don Cheadle
    这让我感到困惑,因为我看到有人在应用程序内、项目内以及现在在项目基础上指定模板?我甚至不知道该称呼这个级别。 - Don Cheadle

    1

    @YardenST的回答对我来说基本上有效。我猜这是配置问题。

    如果你遇到麻烦,我建议你使用这行代码:

    TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'mytemplates'),)
    

    接下来,设置一个断点以显示实际结果,或者使用print TEMPLATE_DIRS这就是您应该放置要覆盖的模板的位置。

    1

    @kat-russo,谢谢;)

    我尝试根据文档设置管理模板。

    project_name
    -app1
    -app2
    -project_name //main folder -> settings.py , urls.py, wsgi.py
    -templates
    -admin
      -project_name
         base.html
    

    没有成功,但是

     -templates
       -admin
          base.html
    

    对我来说可行。

    我的配置(Django 1.10.4 w/Django CMS 3.4.1)

    TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates"),],
        'APP_DIRS': True,
        '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',
                'sekizai.context_processors.sekizai',
                'cms.context_processors.cms_settings',
            ],
    
        },
    },
    ]
    

    谢谢@3176243。我一直在苦思冥想如何进行这个设置。 - Misael Barreto

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接