django

2011-09-09 3 views
43

में व्यवस्थापक सीएसएस ओवरराइड करना मैं admin.cj जैसे admin cjango में कुछ सीएसएस को बदलना चाहता हूं। क्या सीधे django पुस्तकालय में बदलना बेहतर है? मैं इसे सबसे अच्छे तरीके से कैसे ओवरराइड कर सकता हूं?django

उत्तर

74

यह आप जो कुछ करना चाहते हैं उस पर निर्भर करता है। हालांकि सबसे पहले: सीधे Django व्यवस्थापक में इसे ओवरराइट न करें। आपको दो विकल्प मिलते हैं जो मुझे लगता है कि उचित हैं:

  1. यदि आप सामान्य रूप से व्यवस्थापक की उपस्थिति को बदलना चाहते हैं तो आपको व्यवस्थापक टेम्पलेट्स को ओवरराइड करना चाहिए। यह यहां विवरण में शामिल है: Overriding admin templates। कभी-कभी आप मूल व्यवस्थापक फ़ाइल का विस्तार कर सकते हैं और फिर उदाहरण के रूप में django/contrib/admin/templates/admin/base.html में {% block extrastyle %}{% endblock %} जैसे ब्लॉक को ओवरराइट कर सकते हैं।
  2. यदि आपकी शैली मॉडल विशिष्ट है तो आप अपने admin.py में Media मेटा क्लास के माध्यम से अतिरिक्त शैलियों को जोड़ सकते हैं। यहाँ एक उदाहरण देखें:
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 आदि में विशिष्ट परिवर्तन होने के लिए एक विकल्प है मेरे व्यवस्थापक में व्यवस्थापक/base.html को शामिल करना और व्यवस्थापक/base.html फ़ाइल में मेरे कस्टम base.css का उपयोग करना। इस तरह मुझे django व्यवस्थापक से अपनी खुद की साइट पर कुछ टेम्पलेट फ़ाइलों को शामिल करना होगा। क्या इससे कोई बेहतर समाधान है? –

+0

कोई भी मुझे पता नहीं है। Django व्यवस्थापक अंत में एक django reusable ऐप से कुछ और नहीं है। किसी भी अन्य पुन: प्रयोज्य ऐप के साथ जाने का यही तरीका है। –

+0

मुझे लगता है कि यहां जेएस के भीतर सूचीबद्ध एक .css फ़ाइल है ... क्या वास्तव में यह काम करता है? मैं इसे प्राप्त नहीं कर सकता। – fastmultiplication

21

मैं सिर्फ विस्तारित व्यवस्थापक/base.html अंत में अपनी खुद की सीएसएस फ़ाइल का संदर्भ शामिल करने के लिए। सीएसएस की सुंदरता यह है कि आपको मौजूदा परिभाषाओं को छूने की ज़रूरत नहीं है, बस फिर से परिभाषित करें।

+0

यह शायद सबसे साफ है और भविष्य में रिलीज के लिए आशा रखता है –

12

अपनी स्थिर निर्देशिका में, static/admin/css/base.css फ़ाइल बनाएं।

पहले Django's default Admin CSS में चिपकाएं, और फिट होने पर समायोजित करें।

+5

यदि आप ऐसा करते हैं, तो 'INSTALLED_APPS' की सूची में' django.contrib.admin' से पहले अपना ऐप डालना सुनिश्चित करें। यदि आप नहीं करते हैं, तो संग्राहक को व्यवस्थापक base.css पहले मिलेगा और आपका कस्टमाइज़ किया गया संस्करण इसे ओवरराइट नहीं करेगा। – Dave

+0

यह एक अच्छा दीर्घकालिक समाधान नहीं है। यह कोड का एक समूह कॉपी/पेस्ट करता है और इसे Django के उन्नयन के रूप में बनाए रखा नहीं जाएगा। – mlissner

+0

Django व्यवस्थापक के लिए कोई स्टाइल मूल रूप से कोड का एक कांटा है। Django के लिए एक अद्यतन प्रभावी रूप से अपने अनुकूलन तोड़ सकता है। मेरी सिफारिश है कि अनुकूलन को न्यूनतम रखें और उन्हें Django की डिफ़ॉल्ट स्टाइल के नीचे जोड़ें। फिर आप जब चाहें डिफ़ॉल्ट स्टाइल मैन्युअल रूप से अपडेट कर सकते हैं। –

3

STATICFILES_DIRS में किसी फ़ोल्डर के अंदर admin/css/changelists.css है, और यह उपयोगकर्ता डिफ़ॉल्ट व्यवस्थापक के बजाय changelists.css उपयोगकर्ता करेगा।

9

यह समाधान व्यवस्थापक साइट के लिए काम करेगा, मुझे लगता है कि यह सबसे साफ तरीका है क्योंकि यह base_site.html ओवरराइड करता है जो django को अपग्रेड करते समय परिवर्तित नहीं होता है।

अपनी टेम्पलेट निर्देशिका में admin नामक फ़ोल्डर को base_site.html नामक फ़ाइल बनाएं।

के तहत अपनी स्थैतिक निर्देशिका में admin-extra.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 %} 

यह है कि! आपने

+1

धन्यवाद, महान काम करता है! यदि यह काम नहीं करता है, तो सुनिश्चित करें कि आपका ऐप 'INSTALLED_APPS' में व्यवस्थापक ऐप से पहले है, अन्यथा आपका टेम्पलेट django के ओवरराइड नहीं करता है। – Dirbaio

1

यदि आप वैश्विक क्षेत्र चाहते हैं और आप ओवरराइडिंग टेम्पलेट्स के बारे में नहीं सोचना चाहते हैं तो एक मिश्रण इस के लिए वास्तव में अच्छा काम करता है।तब

class CSSAdminMixin(object): 
    class Media: 
     css = { 
      'all': ('css/admin.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 बनाएँ और {% block extrahead %}

उदाहरण में <style> ब्लॉक कर दिया:

{% extends "admin/base_site.html" %} 
{% block extrahead %} 
    <style> 
     .field-__str__ { 
      font-family: Consolas, monospace; 
     } 
    </style> 
{% endblock %}