2011-09-09 5 views

ответ

74

Это зависит от того, что вы хотите сделать. Хотя прежде всего: не переписывайте его в администраторе Django напрямую. У вас есть два варианта, которые я считаю разумными:

  1. Если вы хотите изменить внешний вид администратора в целом, вы должны переопределить шаблоны администратора. Это подробно описано здесь: Overriding admin templates. Иногда вы можете просто расширить исходный файл администратора, а затем перезаписать блок, например {% block extrastyle %}{% endblock %}, в django/contrib/admin/templates/admin/base.html.
  2. Если ваш стиль специфичен для модели, вы можете добавить дополнительные стили с помощью метакласса Media в admin.py. Смотрите пример здесь:
class MyModelAdmin(admin.ModelAdmin): 
    class Media: 
     js = ('js/admin/my_own_admin.js',)  
     css = { 
      'all': ('css/admin/my_own_admin.css',) 
     } 
+0

На самом деле, это не уровень модели, но сам весь сайт. Чтобы быть конкретными изменениями в base.css, ie.css и т. Д. Один из вариантов - включить admin/base.html в мое приложение и использовать свой пользовательский base.css в файле admin/base.html. Таким образом, я должен будет добавить некоторые файлы шаблонов из admin django на мой собственный сайт. Есть ли лучшее решение, чем это? –

+0

Нет. Я знаю. Администратор django - это не что иное, как приложение для повторного использования django. Это способ пойти с любым другим многоразовым приложением. –

+0

Я замечаю, что есть файл .css, указанный в js здесь ... действительно ли это работает? Я не могу это понять. – fastmultiplication

21

Я просто расширенный администратор/base.html включить ссылку на мой собственный файл css - в конце. Красота css заключается в том, что вам не нужно касаться существующих определений, просто переопределяйте их.

+0

Это, пожалуй, самый чистый и надеется на будущие выпуски –

12

В вашем статическом каталоге создайте файл static/admin/css/base.css.

Сначала вставьте в Django's default Admin CSS и отрегулируйте, как вы сочтете нужным.

+5

Если вы сделаете это, обязательно добавьте свое приложение ДО 'django.contrib.admin' в список' INSTALLED_APPS'. Если вы этого не сделаете, collectstatic сначала найдет admin base.css, и ваша настраиваемая версия не перезапишет его. – Dave

+0

Это нехорошее долгосрочное решение. Он копирует/вставляет кучу кода, и он не будет поддерживаться как обновления Django. – mlissner

+0

Любой стиль для администратора Django в основном является вилкой кода. Обновление Django может фактически нарушить ваши настройки. Моя рекомендация состоит в том, чтобы сохранить настройки до минимума и добавить их в нижней части стиля Django по умолчанию. Затем вы можете вручную обновить стиль по умолчанию, если и когда захотите. –

3

У вас есть admin/css/changelists.css внутри папки в STATICFILES_DIRS, и он будет использовать этот файл changelists.css вместо стандартного администратора.

9

Это решение будет работать на сайте администратора, я думаю, что это самый чистый способ, поскольку он переопределяет 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 %} 

Это Он! You'r done

+1

Спасибо, отлично работает! Если это не работает, убедитесь, что ваше приложение находится перед приложением администратора в 'INSTALLED_APPS', иначе ваш шаблон не будет переопределять django. – Dirbaio

1

Если вы хотите получить глобальный охват, и вы не хотите думать о переопределении шаблонов, mixin отлично работает для этого.Поместите этот код там, где вы хотите:

class CSSAdminMixin(object): 
    class Media: 
     css = { 
      'all': ('css/admin.css',), 
     } 

Затем создайте файл CSS под названием admin.css с вашими переопределениями, например:

select[multiple] { 
    resize: vertical; 
} 

Тогда, в любой модели вы хотите, сделайте следующее:

class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin): 

И все будет готово.

+0

Мне нравится ваш ответ, но почему бы не добавить непосредственно в MyModelAdmin – Goran

+0

Вы можете сделать это, если это одна модель, но это будет беспорядочно, если вы сделаете это для многих моделей. – mlissner

2
  • В 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 %} 
Смежные вопросы