Python Django(grappelli):如何将我自己的css添加到所有页面,或者如何扩展admin';s base.html?

Python Django(grappelli):如何将我自己的css添加到所有页面,或者如何扩展admin';s base.html?,python,django,django-admin,django-grappelli,Python,Django,Django Admin,Django Grappelli,在Django grappelli中,如何将自己的css文件添加到所有管理页面?或者有没有办法扩展管理员的base.html模板? 如果您想更改管理员的外观,通常应该覆盖管理员模板。这里详细介绍了这一点:覆盖管理模板。有时,您可以扩展原始管理文件,然后覆盖一个块,例如django/contrib/admin/templates/admin/base.html中的{%block extrastyle%}{%endblock%} 如果您的样式是特定于模型的,则可以通过admin.py中的Media

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

  • 如果您想更改管理员的外观,通常应该覆盖管理员模板。这里详细介绍了这一点:覆盖管理模板。有时,您可以扩展原始管理文件,然后覆盖一个块,例如django/contrib/admin/templates/admin/base.html中的{%block extrastyle%}{%endblock%}
  • 如果您的样式是特定于模型的,则可以通过admin.py中的Media meta类添加其他样式。请参见此处的示例:
类MyModelAdmin(admin.ModelAdmin):
班级媒体:
js=('js/admin/my_own_admin.js',)
css={ 'all':('css/admin/my_own_admin.css',) }

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

  • pip安装django templateloaderwithpriorities
  • 在django设置文件中输入下一个代码:

    模板加载程序=('templateloaderwithpriorities.Loader',)+模板加载程序 模板\u加载程序\u优先级=['project/admin/templates']

  • project/static/css/admin/extra_admin.css
    中放置css
  • project/admin/templates/admin/base\u site.html
    (不在
    base.html
    !)中输入下一个代码:

    {%extends'admin/base.html%}
    {%load staticfiles%}
    {%block javascripts%}
    {{block.super}}
    警报(“正常”)
    {%endblock%}
    {%块样式表%}
    {{block.super}}
    {%endblock%}

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

  • Django Grappelli的一切都很好。

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

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

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

    导入操作系统
    模板=[
    {
    'BACKEND':'django.template.backends.django.DjangoTemplates',
    “应用程序目录”:正确,
    “DIRS”:[
    '您的/normal/templates/path',
    os.path.dirname(图形文件)
    ]
    },
    ]
    

    通过这种方式,您可以创建一个
    admin/base.html
    模板,该模板将扩展
    templates/admin/base.html
    ——后者是管理界面的Grapelli基本模板

    管理员'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 %}
    
    {%extends'admin/base.html%}
    {%load staticfiles%}
    {%block javascripts%}
    {{block.super}}
    {%endblock%}
    {%块样式表%}
    {{block.super}}
    {%endblock%}
    

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

    查看此帖子:@AlonWeissfeld不完全是需要的,但是谢谢。我创建了一个模板项目/admin/templates/admin/base.html,并添加了下一个:
    {%extends'admin/base.html%}{%block extrastyle%}{%endblock%}
    但在我的操作之后,管理没有变化。这正是我所需要的。感谢您为特定于模型的附加css指明了方向。这是一个漂亮的解决方案,但“DIRS”参数仅在Django 1.8版本之后发布,它将与1.8版本之前的Django版本中的模板_DIRS一起使用:-我粘贴的整个模板设置只是为了给出设置应放置的位置的上下文。谢谢,下次我将尝试您的解决方案