【问题标题】:Django (grappelli): how add my own css to all the pages or how to extend admin's base.html?Django (grappelli):如何将我自己的 CSS 添加到所有页面或如何扩展管理员的 base.html?
【发布时间】:2015-10-29 06:05:30
【问题描述】:

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

【问题讨论】:

标签: python django django-admin django-grappelli


【解决方案1】:
  • 如果您想更改管理员的外观,您应该覆盖管理员模板。此处详细介绍了这一点:覆盖管理模板。有时您可以只扩展原始管理文件,然后覆盖 django/contrib/admin/templates/admin/base.html 中的 {% block extrastyle %}{% endblock %} 之类的块。
  • 如果您的样式是特定于模型的,您可以通过 admin.py 中的 Media 元类添加其他样式。在此处查看示例:

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

【讨论】:

  • 我创建了一个模板 project/admin/templates/admin/base.html 并添加了下一个:{% extends 'admin/base.html' %} {% block extrastyle %} <link rel="stylesheet" href="{% static 'admin/css/extra_admin.css' %}"> {% endblock %} 但我的操作后管理员没有任何变化。
  • 这正是我所需要的。感谢您为模型特定的附加 css 展示方式。
【解决方案2】:

不久前我偶然发现了同样的问题,但我不记得我在哪里找到了这个解决方案。

如果您不想在项目中包含其他依赖项,可以使用一点技巧:显然,您不能只覆盖 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 基本模板。

【讨论】:

  • 漂亮的解决方案,但 'DIRS' 参数仅在 Django 1.8 之后才发布
  • 它将在 django 1.8 之前的版本中与 TEMPLATE_DIRS 一起使用:docs.djangoproject.com/en/1.8/ref/settings/#template-dirs - 我粘贴的整个 TEMPLATES 设置只是为了给出设置应该放在哪里的上下文。
  • 谢谢,下次试试你的解决方案
【解决方案3】:

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

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

    TEMPLATE_LOADERS = ('templateloaderwithpriorities.Loader', ) + TEMPLATE_LOADERS 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 也能正常工作。

【讨论】:

    【解决方案4】:

    可以通过在主应用文件夹中创建一个管理目录来扩展管理“base.html”模板。在 admin 目录中创建一个名为 base.html 的新文件。将这些行复制到新文件中。

    {% extends 'admin/base.html' %}
    {% load staticfiles %}
    {% block javascripts %}
        {{ block.super }}
    <script type="text/javascript" src="{% static 'app/js/action.js' %}"></script>
    
    {% endblock %}
    {% block stylesheets %}
    
        {{ block.super }}
    {% endblock %}
    

    在这里,我使用新脚本覆盖了我的 javascript。

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2020-08-09
      • 2011-01-14
      • 1970-01-01
      • 2021-12-20
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多