【发布时间】:2015-10-29 06:05:30
【问题描述】:
在 Django grappelli 中,如何将自己的 css 文件添加到所有管理页面?或者有没有办法扩展管理员的base.html 模板?
【问题讨论】:
-
@AlonWeissfeld 不完全是需要什么,但谢谢。
标签: python django django-admin django-grappelli
在 Django grappelli 中,如何将自己的 css 文件添加到所有管理页面?或者有没有办法扩展管理员的base.html 模板?
【问题讨论】:
标签: python django django-admin django-grappelli
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
【讨论】:
{% extends 'admin/base.html' %} {% block extrastyle %} <link rel="stylesheet" href="{% static 'admin/css/extra_admin.css' %}"> {% endblock %} 但我的操作后管理员没有任何变化。
不久前我偶然发现了同样的问题,但我不记得我在哪里找到了这个解决方案。
如果您不想在项目中包含其他依赖项,可以使用一点技巧:显然,您不能只覆盖 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 模板加载器,您的模板与其他模板相比具有最高优先级。
pip install django-templateloaderwithpriorities在您的 django 设置文件中输入下一个代码:
TEMPLATE_LOADERS = ('templateloaderwithpriorities.Loader', ) + TEMPLATE_LOADERS TEMPLATE_LOADER_PRIORITIES = ['project/admin/templates']
project/static/css/admin/extra_admin.css 中输入你的css。在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 %}
Django Grappelli 也能正常工作。
【讨论】:
可以通过在主应用文件夹中创建一个管理目录来扩展管理“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。
【讨论】: