मैं आधार django जैसे base.css में कुछ सीएसएस बदलना चाहता हूं। क्या django लाइब्रेरी में सीधे बदलाव करना बेहतर है? मैं इसे सबसे अच्छे तरीके से कैसे ओवरराइड कर सकता हूं?
मैं आधार 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 %}
मैंने अपनी स्वयं की सीएसएस फ़ाइल के लिए एक संदर्भ शामिल करने के लिए अभी-अभी व्यवस्थापक / base.html बढ़ाया है - अंत में। सीएसएस की सुंदरता यह है कि आपको मौजूदा परिभाषाओं को छूने की जरूरत नहीं है, बस फिर से परिभाषित करें।
यह समाधान व्यवस्थापक साइट के लिए काम करेगा, मुझे लगता है कि यह सबसे साफ तरीका है क्योंकि यह ओवरराइड base_site.htmlकरता है जो django को अपग्रेड करते समय नहीं बदलता है।
अपने टेम्प्लेट डायरेक्टरी में बनाएं एक फोल्डर, जिसमें adminएक फाइल होती है, जिसका नाम एक फाइल होता है base_site.html।
cssनामक फ़ाइल के अंतर्गत अपनी स्थिर निर्देशिका बनाएँ 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 %}
जैसा कि टिप्पणियों में उल्लेख किया गया है: सुनिश्चित करें कि आपका ऐप INSTALLED_APPS में व्यवस्थापक ऐप से पहले है, अन्यथा आपका टेम्पलेट kango के ओवरराइड नहीं करता है
बस! हो गया
INSTALLED_APPS, अन्यथा आपका टेम्पलेट django के ओवरराइड नहीं करता है।
base_site.htmldjango को अपग्रेड करते समय कभी नहीं बदलेगा? (मेरा मतलब है कि यह उत्तर 3 साल पुराना है और अभी भी काम करता है लेकिन यह कोई गारंटी नहीं है)
अपनी स्थिर निर्देशिका में, एक static/admin/css/base.cssफ़ाइल बनाएँ ।
पहले Django के डिफ़ॉल्ट एडमिन CSS में पेस्ट करें , फिर नीचे अपने कस्टमाइज़ेशन जोड़ें।
django.contrib.adminकी सूची में रखना सुनिश्चित करें INSTALLED_APPS। यदि आप नहीं करते हैं, तो सामूहिक रूप से व्यवस्थापक base.css सबसे पहले मिलेगा और आपका अनुकूलित संस्करण इसे अधिलेखित नहीं करेगा।
यदि आप एक वैश्विक दायरा चाहते हैं और आप टेम्पलेट को ओवरराइड करने के बारे में नहीं सोचना चाहते हैं तो इसके लिए एक मिक्सिन वास्तव में अच्छी तरह से काम करता है। इस कोड को आप जहां चाहें डाल दें:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
फिर, admin.cssउदाहरण के लिए, अपने ओवरराइड्स के साथ सीएसएस फ़ाइल बनायें:
select[multiple] {
resize: vertical;
}
फिर, आप जो भी मॉडल चाहते हैं, करें:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
और तुम सब सेट हो जाओगे।
में admin/css/changelists.cssएक फ़ोल्डर के अंदर है STATICFILES_DIRS, और यह उपयोगकर्ता है कि डिफ़ॉल्ट व्यवस्थापक एक के बजाय changelists.css होगा।