在Django覆盖pipe理员的CSS
我想改变pipe理django像base.css某些CSS。 在django库中直接更改是否更好? 我怎样才能以最好的方式覆盖它?
这取决于你想做什么。 尽pipe首先:不要直接在Djangopipe理员中覆盖它。 你有两个select,我认为是合理的:
- 如果您想更改pipe理员的外观,则应该覆盖pipe理员模板。 这在这里详细介绍: 覆盖pipe理模板 。 有时你可以扩展原来的pipe理文件,然后覆盖
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',) }
我只是扩展了admin / base.html以包含对我自己的css文件的引用 – 最后。 CSS的美妙之处在于,您不必触摸现有的定义,只需重新定义即可。
在你的静态目录下,创build一个static/admin/css/base.css
文件。
首先粘贴到Django默认的Admin CSS中 ,然后按照你的要求进行调整。
这个解决scheme适用于pipe理员站点,我认为这是最干净的方式,因为它覆盖了base_site.html
,在升级django时不会改变。
在您的模板目录中创build一个名为admin
的文件夹,创build一个名为base_site.html
的文件。
在你的静态目录下创build一个名为admin-extra.css
的文件。
写下你所需要的所有自定义CSS,如: body{background: #000;}
。
将其粘贴到base_site.html
:
{% extends "admin/base.html" %} {% load static from staticfiles %} # This might be just {% load static %} in your ENV {% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %} {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "css/admin-extra.css" %}" />{% endblock %} {% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1> {% endblock %} {% block nav-global %}{% endblock %}
而已! 你完成了
也许grappelli会救你麻烦…
https://github.com/sehmaschine/django-grappelli
http://lincolnloop.com/static/slides/2010-djangocon/customizing-the-admin.html#slide37
在STATICFILES_DIRS
的文件夹中有admin/css/changelists.css
,它将使用changelists.css而不是默认的admin。
如果你想要一个全局范围,而且你不想考虑重写模板,那么mixin就能很好地工作。 把这个代码放在任何你想要的地方:
class CSSAdminMixin(object): class Media: css = { 'all': ('css/admin.css',), }
然后,使用您的覆盖来创build一个名为admin.css
的CSS文件,例如:
select[multiple] { resize: vertical; }
那么,无论你想要什么样的模型,都要:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
你会一切的。