Я хочу змінити певний css в адмін-django, наприклад base.css. Чи краще змінювати безпосередньо в бібліотеці django? Як я можу замінити це найкращим чином?
Я хочу змінити певний css в адмін-django, наприклад base.css. Чи краще змінювати безпосередньо в бібліотеці django? Як я можу замінити це найкращим чином?
Відповіді:
Це багато в чому залежить від того, що ви хочете зробити. Хоча перш за все: не перезаписуйте його безпосередньо в адміністраторі Django. У вас є два варіанти, які я вважаю обґрунтованими:
{% block extrastyle %}{% endblock %}
у django/contrib/admin/templates/admin/base.html
прикладі.Media
мета-клас у вашому admin.py
. Дивіться приклад тут:
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
settings.py
, переконайтеся , що ваш додаток в списку перед адміністратором в INSTALLED_APPS
.(your-app)/templates/admin/base_site.html
і помістіть <style>
блок у{% block extrahead %}
Приклад:
{% extends "admin/base_site.html" %}
{% block extrahead %}
<style>
.field-__str__ {
font-family: Consolas, monospace;
}
</style>
{% endblock %}
Я просто розширив admin / base.html, щоб включити посилання на власний файл css - наприкінці. Краса css полягає в тому, що вам не потрібно торкатися існуючих визначень, просто перевизначте їх.
Це рішення буде працювати для сайту адміністратора, я думаю, це найчистіший спосіб, оскільки він замінює, base_site.html
що не змінюється під час оновлення django.
Створіть у каталозі шаблонів папку, що admin
в ній називається, і створіть файл із іменем base_site.html
.
Створіть у своєму статичному каталозі css
файл, який називається 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 %}
Як зазначалося в коментарях: переконайтеся, що ваш додаток стоїть перед додатком адміністратора в INSTALLED_APPS, інакше ваш шаблон не замінить django
Це воно! ви закінчили
INSTALLED_APPS
, інакше ваш шаблон не замінить django.
base_site.html
ніколи не зміниться під час оновлення django? (Я маю на увазі так, цій відповіді 3 роки і вона все ще працює, але це не гарантія)
У вашому статичному каталозі створіть static/admin/css/base.css
файл.
Спочатку вставте стандартний адміністратор CSS для Django , а потім додайте свої налаштування внизу.
django.contrib.admin
в список INSTALLED_APPS
. Якщо ви цього не зробите, collestatic знайде спочатку адміністратор base.css, і ваша налаштована версія не перезапише його.
Якщо вам потрібна глобальна сфера, і ви не хочете думати про перевизначення шаблонів, для цього суміш працює дуже добре. Помістіть цей код куди завгодно:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
Потім створіть файл CSS, що викликається admin.css
з вашими перевизначеннями, наприклад:
select[multiple] {
resize: vertical;
}
Тоді в будь-яких моделях, які ви хочете, виконайте:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
І у вас все буде готово.
Майте admin/css/changelists.css
всередині папки в STATICFILES_DIRS
, і вона буде користуватися тим, що changelists.css замість адміністратора за замовчуванням.