【问题标题】:django override admin templatedjango覆盖管理模板
【发布时间】:2013-01-23 03:43:07
【问题描述】:

我关注part 2 of the Django tutorial。我正在尝试覆盖管理模板 (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 文件夹中,但没有成功。任何指针都会很棒!

【问题讨论】:

    标签: django


    【解决方案1】:

    编辑了以前的用户响应——这有效:

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

    如果您按照以下步骤操作,它应该可以工作:(我自己测试过)

    1. mytemplates 目录与manage.py 文件并排放置

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

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

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

    【讨论】:

    • 在这种配置下,admin 不应该是mytemplates/ 的子目录吗?
    • 这行得通,只要你在TEMPLATE_DIRS = (os.path.join ...中使用正确的文件夹名称
    • 这很令人困惑,因为我看到人们在应用程序中、项目中指定模板,现在在这里——在项目库中?我什至不知道如何称呼这个级别
    【解决方案2】:

    @YardenST 的回答几乎对我有用。我猜这是配置问题。

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

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

    接下来,放置一个断点来显示实际结果,或者使用print TEMPLATE_DIRS

    您应该在此处放置要覆盖的模板。

    【讨论】:

      【解决方案3】:

      @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。我正在努力弄清楚如何进行此设置。
      【解决方案4】:

      您可以覆盖所有模板。

      在模板中创建一个管理目录并添加文件。

      所有文件。

      https://github.com/django/django/tree/master/django/contrib/admin/templates/admin

      【讨论】: