在Django中覆盖特定的管理员CSS文件

3 投票
3 回答
4142 浏览
提问于 2025-04-17 04:36

要覆盖管理员模板其实很简单,只需要在你的模板文件夹里创建一个叫 admin 的文件夹,然后把你想要覆盖的模板文件复制到里面就可以了。不过我只是想调整一下管理员的样式表,所以我在我的静态文件夹里也创建了一个 admin 文件夹,并把 css/base.css 放了进去。但是,这种方法似乎不太管用。

那么,有没有办法像覆盖模板那样,单独覆盖 django.contrib.admin 的 CSS 文件呢?如果有的话,最好的解决办法是什么?我希望能找到一个方法,不用把所有的管理员媒体文件都复制到我的项目里,也不想改变管理员的静态目录。

3 个回答

0

你可以尝试修改你的urls.py文件,让它只从本地文件夹提供一个媒体链接,而其他的链接则从Django的目录中提供(在开发模式下)。

10

我想实现这个功能的方法是重写 base_site.html 模板,像这样:

{% block blockbots %}
<link rel="stylesheet" type="text/css" href="/media/css/my_admin.css" />
{{ block.super }}
{% endblock %}

我把 CSS 放在 blockbots 里,而不是放在 extrahead,这样可以确保它最后加载,这样就能覆盖其他所有的 CSS。

2

我在寻找一个解决办法,不想把所有的管理员媒体文件都复制到我的项目里,也不想改变管理员的静态目录。

我觉得其实没有什么其他的办法。你需要把媒体文件复制到一个新的目录,然后在启动服务器的时候,传递一个叫 adminmedia 的命令行参数,像这样:

python manage.py runserver --adminmedia=./myadminmedia

无论如何,当你在生产服务器上运行的时候,管理员的媒体文件必须从一个好的静态文件服务器上提供,这样你就可以指向这个新的路径。

参考文档:https://docs.djangoproject.com/en/1.3/ref/django-admin/#django-admin-option---adminmedia

撰写回答