【问题标题】:Django admin/site_base.html overwrites my admin/site_base.htmlDjango admin/site_base.html 覆盖我的 admin/site_base.html
【发布时间】:2017-10-14 13:29:40
【问题描述】:

我的 admin/base_site.html 没有加载或被 django 的 admin/base_site.html 覆盖。请让我知道我错过了什么(我最近开始)

我的模板在

BASE_DIR/templates/admin/base_site.html

在设置中

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [
            os.path.join(BASE_DIR, "templates"),
        ],
        "APP_DIRS": True,
        "OPTIONS": {
            'debug': True,
            "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.template.context_processors.request",
                "django.contrib.messages.context_processors.messages",
                "account.context_processors.account",
                "pinax_theme_bootstrap.context_processors.theme",
            ],
        },
    },
]

编辑:我在我的问题中犯了一个错误,我的模板实际上是在

PROJECT_ROOT/templates/admin/base_site.html

其中PROJECT_ROOT是manage.py的目录。

【问题讨论】:

    标签: python html django


    【解决方案1】:

    确保您的应用程序在您的 django settings.pyINSTALLED_APPS 中的 django.contrib.admin 之前声明

    确实,Django 的模板加载器将遍历INSTALLED_APPS 中的应用程序并获取docs 中描述的第一个匹配模板。

    INSTALLED_APPS 的顺序很重要!例如,如果你想 要自定义 Django 管理员,您可以选择覆盖 标准 admin/base_site.html 模板,来自 django.contrib.admin, 在 myproject.polls 中使用您自己的 admin/base_site.html。 那么你必须 确保你的 myproject.polls 在 django.contrib.admin 之前 在 INSTALLED_APPS 中,否则将加载 django.contrib.admin 的 首先,您的将被忽略。

    【讨论】:

    • 看起来会是这样 如果我将模板放在“myproject/polls/templates/admin”下,但如果我将模板保留在“myproject/templates/admin”下怎么办?那不应该也加载和覆盖之前加载的任何内容吗?
    • 确实应该是因为根据文档,第一个默认加载器是django.template.loaders.filesystem.Loader,它使用DIRS。创建 BASE_DIR/templates 目录后是否重新启动服务器?尝试从该目录加载一个与其他模块没有名称冲突的模板,以检查服务器是否真的在该目录中寻找模板......希望它有所帮助。
    【解决方案2】:

    解决办法是把 DIRS 改成

    "DIRS": [
            os.path.join(BASE_DIR, "templates"),
            os.path.join(PROJECT_ROOT, "templates"),
        ],
    

    问题出在设置中。

    "DIRS": [
            os.path.join(BASE_DIR, "templates"),
        ],
    

    这里 BASE_DIR 是主应用程序的目录,因此 DIRS 包括 mysite/mysite/templates

    我的问题有一个错误。我认为 BASE_DIR 是我项目的目录,因此我的模板位于

    BASE_DIR/templates/admin/base_site.html

    但实际上是在

    PROJECT_ROOT/templates/admin(manage.py 在哪里)

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2019-08-15
      • 2021-06-10
      • 2015-03-16
      • 2019-07-02
      • 2014-08-15
      • 2020-05-03
      • 2017-08-23
      • 2012-04-19
      相关资源
      最近更新 更多