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

时间:2015-08-06 07:50:47

标签: python django django-admin django-grappelli

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

4 个答案:

答案 0 :(得分: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',) }

答案 1 :(得分:1)

我刚才偶然发现了同样的问题,但我无法记住我找到这个解决方案的位置。

如果您不希望在项目中包含其他依赖项,则可以使用一点hack:显然,您无法覆盖Fizz模板并告诉它扩展{{ 1}},因为那会引用自己。

但是,您可以添加另一个指向grappelli模块位置的模板目录(而不是admin/base.html位置)。设置看起来像这样:

admin/base.html

通过这种方式,您可以创建templates模板,该模板将扩展import os TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True, 'DIRS': [ 'your/normal/templates/path', os.path.dirname(grappelli.__file__) ] }, ] - 后者是管理界面的grappelli基础模板。

答案 2 :(得分:0)

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

  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警告“确定”,因此在我的示例中,我还包含了一个自定义js。
  6. Django Grappelli也能正常运作。

答案 3 :(得分:0)

可以通过在主app文件夹中创建一个admin目录来扩展admin'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。