【问题标题】:Extending admin interface in django在 django 中扩展管理界面
【发布时间】:2019-04-24 10:21:42
【问题描述】:

下图路径对自定义管理界面没有帮助

输入设置.py

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "templates"),
]

IN 根 模板是文件夹名称 在那里我创建了一个目录管理员并在其中 base.html

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

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

所以任何人都可以建议。现在该怎么办

【问题讨论】:

  • 您是否将应用程序包含在INSTALLED_APPS 中的settings.py 中?

标签: django


【解决方案1】:

通过创建&lt;PROJECT_ROOT&gt;/templates/admin/base.html,您将覆盖 Django 管理应用程序base.html。但是在您扩展的模板中,您的模板中使用了相同的模板。由于它会创建一个循环,因此您将面临一些错误。

不要覆盖admin/base.html,而是覆盖admin/base_site.html。我相信这就是你想要的。在您的情况下,只需将您的模板文件从 base.html 重命名为 base_site.html 并试一试。如果您遇到任何异常,请编辑您的问题并添加完整的堆栈跟踪。

更新 2

收到您的评论后,我看到您将模板目录提供给STATICFILES_DIRS 设置。这是错误的。您需要在TEMPLATES 设置中指定它们,如下所示:

这是我的一个项目

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',
            ],
        },
    },
]

据我所知,您的模板文件夹中有静态文件。这个不对。您应该将它们放在单独的文件夹中并将它们传递到 STATICFILES_DIRS 中,就像您已经做的那样。然后您的静态文件将可供您使用。

建议 以前的 cmets 可以解决您的问题。但我想提出其他建议。 Django 有一个模板和静态文件发现和覆盖机制。 您的静态文件和模板不绑定到此解决方案中的任何应用程序。 但是,有时将它们捆绑在一起是件好事。 因此,如果您创建一个应用程序并在该应用程序内创建模板和静态文件夹并将您的模板和静态文件放在这些目录中,结果将是相同的。 在这种情况下,您需要将您的应用名称添加到INSTALLED_APPS

【讨论】:

  • 我试过什么都没发生。但是当我将 os.path.join(BASE_DIR, "templates") 放在 settings.py 的 dir[] 中时,它可以工作,但是我的所有引导程序和其他 js cs 文件都没有加载
  • 我现在明白了,你不应该在STATICFILES_DIRS 中定义你的模板目录。它应该在您在评论中描述的地方。问题是您不应该将静态文件和模板放在一起。您可能想为静态文件创建一个单独的目录,并在STATICFILES_DIRS 中提及它们。我会相应地更新我的答案。