在Django覆盖pipe理员的CSS

我想改变pipe理django像base.css某些CSS。 在django库中直接更改是否更好? 我怎样才能以最好的方式覆盖它?

这取决于你想做什么。 尽pipe首先:不要直接在Djangopipe理员中覆盖它。 你有两个select,我认为是合理的:

  1. 如果您想更改pipe理员的外观,则应该覆盖pipe理员模板。 这在这里详细介绍: 覆盖pipe理模板 。 有时你可以扩展原来的pipe理文件,然后覆盖django/contrib/admin/templates/admin/base.html中的{% block extrastyle %}{% endblock %}
  2. 如果您的风格是特定于模型的,则可以通过admin.pyMedia元类添加其他样式。 在这里看一个例子:
 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 %} 

而已! 你完成了

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): 

你会一切的。