Django(grappelli):如何将我自己的css添加到所有页面或如何扩展管理员的base.html?

2024-05-18 12:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django-grappelli中,如何将我自己的css文件添加到所有管理页面?或者有没有办法扩展管理员的base.html模板?在


Tags: 文件django模板base管理员html页面css
3条回答

我前一阵子也碰到过同样的问题,但我不记得我是从哪里找到这个解决办法的。在

如果您不想在项目中包含额外的依赖项,可以使用一些小技巧:显然,您不能仅仅覆盖admin/base.html模板并告诉它扩展admin/base.html,因为这会引用它自身。在

但是,您可以添加另一个模板目录,该目录将指向grappelli模块位置(而不是templates位置)。设置如下所示:

import os

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'DIRS': [
            'your/normal/templates/path',
            os.path.dirname(grappelli.__file__)
        ]
    },
]

这样您就可以创建一个admin/base.html模板,它将扩展templates/admin/base.html-后者是管理接口的grappelli基本模板。在

我找到了复杂的解决方案。首先,我找到了一个python package,它可以帮助您告诉Django模板加载器,与其他模板相比,您的模板具有最高的优先级。在

  1. pip install django-templateloaderwithpriorities
  2. 在django设置文件中输入下一个代码:

    模板加载器=('TEMPLATEloaderwithpriorities.Loader',)+模板加载器 TEMPLATE_LOADER_PRIORITIES=['project/admin/templates']

  3. project/static/css/admin/extra_admin.css中放入css。在
  4. project/admin/templates/admin/base_site.html(不是在base.html!)输入下一个代码:

    {% extends 'admin/base.html' %} {% load staticfiles %} {% block javascripts %} {{ block.super }} <script>alert('OK')</script> {% endblock %} {% block stylesheets %} <link rel="stylesheet" href="{% static 'css/admin/extra_admin.css' %}"> {{ block.super }} {% endblock %}

  5. 就这些!当您转到站点管理页面时,您会看到javascript警告“OK”,因此在我的示例中,我还包含了一个自定义js。在

Django Grappelli的一切都很好。在

  • 如果您想更改管理员的外观,您应该覆盖管理模板。这将在这里详细介绍:重写管理模板。有时您只需扩展原始管理文件,然后覆盖django/contrib/admin/templates/admin中的{%block extrastyle%}{%endblock%}/基本.html举个例子。在
  • 如果样式是特定于模型的,则可以通过管理员py. 请参见以下示例:

class MyModelAdmin(admin.ModelAdmin): class Media: js = ('js/admin/my_own_admin.js',)
css = { 'all': ('css/admin/my_own_admin.css',) }

相关问题 更多 >