在Django中覆盖特定的管理员CSS文件
要覆盖管理员模板其实很简单,只需要在你的模板文件夹里创建一个叫 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