Django के व्यवस्थापक शीर्ष लेख में 'Django प्रशासन' पाठ को कैसे बदल सकता है?
यह "व्यवस्थापक को अनुकूलित करना" दस्तावेज़ में शामिल नहीं किया गया है।
Django के व्यवस्थापक शीर्ष लेख में 'Django प्रशासन' पाठ को कैसे बदल सकता है?
यह "व्यवस्थापक को अनुकूलित करना" दस्तावेज़ में शामिल नहीं किया गया है।
जवाबों:
अद्यतन : यदि आप Django 1.7+ का उपयोग कर रहे हैं, तो नीचे दिया गया उत्तर देखें ।
2011 से मूल उत्तर:
आपको ऐसा करने के लिए अपना स्वयं का व्यवस्थापक base_site.html
टेम्पलेट बनाने की आवश्यकता है । फ़ाइल बनाने का सबसे आसान तरीका है:
/<projectdir>/templates/admin/base_site.html
यह मूलbase_site.html
की एक प्रति होनी चाहिए , अपने कस्टम शीर्षक में छोड़कर:
{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}
इस काम के लिए, आपको अपने प्रोजेक्ट के लिए सही सेटिंग्स रखने की आवश्यकता है, अर्थात् settings.py
:
/projectdir/templates/
में जोड़ा गया है TEMPLATE_DIRS
।django.template.loaders.filesystem.Loader
में जोड़ा गया है TEMPLATE_LOADERS
।{% extends "admin/base.html" %}
हैं /<projectdir>/templates/admin/base_site.html
, जिसकी आपको आवश्यकता है, यानी {% block branding %}...{% endblock %}
।
TEMPLATE_LOADER
सेटिंग नहीं जोड़ते हैं तब भी उपरोक्त कार्य करता है । बस TEMPLATE_DIR
इतना ही काफी है
Django 1.7 के रूप में आपको टेम्पलेट्स को ओवरराइड करने की आवश्यकता नहीं है। अब आप लागू कर सकते हैं site_header , site_title
और index_title
एक कस्टम पर गुण AdminSite आदेश आसानी से व्यवस्थापक साइट के पृष्ठ का शीर्षक और शीर्ष पाठ बदलने के लिए। एक व्यवस्थापन उपवर्ग बनाएँ और अपने URLconf में अपने उदाहरण को हुक करें:
admin.py:
from django.contrib.admin import AdminSite
from django.utils.translation import ugettext_lazy
class MyAdminSite(AdminSite):
# Text to put at the end of each page's <title>.
site_title = ugettext_lazy('My site admin')
# Text to put in each page's <h1> (and above login form).
site_header = ugettext_lazy('My administration')
# Text to put at the top of the admin index page.
index_title = ugettext_lazy('Site administration')
admin_site = MyAdminSite()
urls.py:
from django.conf.urls import patterns, include
from myproject.admin import admin_site
urlpatterns = patterns('',
(r'^myadmin/', include(admin_site.urls)),
)
अपडेट : जैसा कि ऑक्सफैन द्वारा बताया गया है कि आप बस site_header
अपने urls.py
या admin.py
सीधे उपवर्ग के बिना सेट कर सकते हैं AdminSite
:
admin.site.site_header = 'My administration'
admin_site
। जैसेadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
टेम्पलेट पर निर्भर करता है , जैसे पासवर्ड_ पासवर्ड) तो इसे भी extra_context
url में उपयोग किया जाना चाहिए: जैसेurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
admin.site.site_header
कॉन्फ़िगरेशन किसमें app*/admin.py
प्रभावी होगा?
व्यवस्थापक साइट हेडर सेट करने का एक आसान तरीका है - इसे urls.py
इस तरह से वर्तमान व्यवस्थापक उदाहरण में असाइन करें
admin.site.site_header = 'My admin'
या कोई अलग तरीके से कुछ हेडर-बिल्डिंग मैजिक को लागू कर सकता है
admin.site.site_header = get_admin_header()
इस प्रकार, सरल मामलों में उपवर्ग की कोई आवश्यकता नहीं है AdminSite
admin.site.site_title = 'My site admin'
:।
urls.py
:from django.contrib import admin
AdminSite
और इसे काम करने की कोशिश में कुछ समय बिताया autodiscover()
लेकिन आखिरकार इस समाधान के बारे में सोचा। मेरे पास वास्तव में मेरा ओवरराइड है admin.py
, जो मुझे लगता है कि क्लीनर है क्योंकि यह अन्य सभी व्यवस्थापक-संबंधित तर्क के साथ रखा गया है
में urls.py
आप 3 सबसे महत्वपूर्ण चर ओवरराइड कर सकते हैं:
from django.contrib import admin
admin.site.site_header = 'My project' # default: "Django Administration"
admin.site.index_title = 'Features area' # default: "Site administration"
admin.site.site_title = 'HTML title from adminsitration' # default: "Django site admin"
संदर्भ: इन विशेषताओं पर Django प्रलेखन ।
इस सवाल के जवाब के आधार पर Django 1.8.3 में एक सरल पूर्ण समाधान।
में settings.py
जोड़ने:
ADMIN_SITE_HEADER = "My shiny new administration"
में urls.py
जोड़ने:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.py
। यदि आपके पास पहले से नहीं है, तो बस इसे बनाएं और जोड़ना न भूलें from django.contrib import admin
।
ADMIN_SITE_HEADER
, केवल एक चीज जो यहां मायने रखती है वह हैurls.py
यह करने का सबसे आसान तरीका सुनिश्चित करें कि आपके पास है
from django.contrib import admin
और फिर बस url.py
आप मुख्य आवेदन के नीचे ये जोड़ दें
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
जैसा कि आप टेम्प्लेट में देख सकते हैं , टेक्स्ट को स्थानीयकरण ढांचे ( trans
टेम्पलेट टैग के उपयोग पर ध्यान दें) के माध्यम से दिया गया है । आप टेम्प्लेट की अपनी प्रति बनाए बिना पाठ को ओवरराइड करने के लिए अनुवाद फ़ाइलों में परिवर्तन कर सकते हैं।
mkdir locale
./manage.py makemessages
locale/en/LC_MESSAGES/django.po
इन पंक्तियों को संपादित करें :
msgid "Django site admin"
msgstr "MySite site admin"
msgid "Django administration"
msgstr "MySite administration"
./manage.py compilemessages
Https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files देखें
admin.py:
from django.contrib.admin import AdminSite
AdminSite.site_title = ugettext_lazy('My Admin')
AdminSite.site_header = ugettext_lazy('My Administration')
AdminSite.index_title = ugettext_lazy('DATA BASE ADMINISTRATION')
from django.utils.translation import ugettext_lazy
इस पंक्ति को जोड़ना न भूलें।
सबसे पहले, आपको अपने प्रोजेक्ट में टेम्प्लेट / एडमिन / base_site.html जोड़ना चाहिए। यह फ़ाइल सुरक्षित रूप से अधिलेखित की जा सकती है क्योंकि यह एक ऐसी फ़ाइल है जिसे Django देवों ने आपके व्यवस्थापक साइट को थोड़ा अनुकूलित करने के सटीक उद्देश्य के लिए बनाया है। यहाँ एक उदाहरण है कि फ़ाइल में क्या रखा जाए:
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {% trans 'Some Organisation' %}{% endblock %}
{% block branding %}
<style type="text/css">
#header
{
/* your style here */
}
</style>
<h1 id="site-name">{% trans 'Organisation Website' %}</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
यह आम बात है। लेकिन मैंने इसके बाद ध्यान दिया कि मैं अभी भी मुख्य व्यवस्थापक सूचकांक पृष्ठ पर एक कष्टप्रद "साइट प्रशासन" के साथ छोड़ दिया गया था। और यह स्ट्रिंग किसी भी टेम्पलेट के अंदर नहीं थी, बल्कि व्यवस्थापक दृश्य के अंदर सेट की गई थी। सौभाग्य से इसे बदलना काफी आसान है। मान लें कि आपकी भाषा अंग्रेज़ी पर सेट है, अपनी परियोजना निर्देशिका से निम्न आदेश चलाएँ:
$ mkdir locale
$ ./manage.py makemessages -l en
अब फ़ाइल लोकेल / en / LC_MESSAGES / django.po खोलें और शीर्ष लेख की जानकारी के बाद दो पंक्तियाँ जोड़ें (इस उदाहरण की अंतिम दो पंक्तियाँ)
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-03 03:25+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "Site administration"
msgstr "Main administration index"
इसके बाद, निम्नलिखित कमांड चलाना और अपने प्रोजेक्ट के सर्वर को फिर से लोड करना याद रखें:
$ ./manage.py compilemessages
स्रोत: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-bitit/
से Django 2.0 तुम सिर्फ में एक पंक्ति में जोड़ सकते हैं url.py
और नाम बदलें।
# url.py
from django.contrib import admin
admin.site.site_header = "My Admin Central" # Add this
Django के पुराने संस्करणों के लिए । (<1.11 और पहले) आपको संपादित करने की आवश्यकता हैadmin/base_site.html
इस लाइन को बदलें
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
सेवा
{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}
आप अपने django
संस्करण की जाँच कर सकते हैं
django-admin --version
बस admin.py फ़ाइल में जाएँ और इस लाइन को फ़ाइल में जोड़ें:
admin.site.site_header = "My Administration"
इस काम के लिए आपको कोई खाका बदलने की जरूरत नहीं है, बस आपको settings.py
अपनी परियोजना को अपडेट करने की जरूरत है । के नीचे जाएं settings.py
और इसे परिभाषित करें।
admin.site.site_header = 'My Site Admin'
इस तरह आप Django एडमिन के हेडर को बदल पाएंगे। इसके अलावा आप निम्नलिखित लिंक पर Django व्यवस्थापक अनुकूलन और सेटिंग्स के बारे में अधिक पढ़ सकते हैं।
ऐसा करने के लिए दो तरीके हैं:
1] अधिभावी तक base_site.html
में django/contrib/admin/templates/admin/base_site.html
: निम्न में से सामग्री है base_site.html
:
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
उपरोक्त कोड स्निपेट में site_title & site_header संपादित करें। यह विधि काम करती है लेकिन यह स्थैतिक परिवर्तन के बाद से अनुशंसित नहीं है।
2] urls.py
परियोजना की निर्देशिका में निम्नलिखित पंक्तियों को जोड़कर :
admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"
इस विधि की अनुशंसा की जाती है क्योंकि हम संपादन के बिना साइट-हेडर, साइट-शीर्षक और इंडेक्स-शीर्षक बदल सकते हैं base_site.html
।
आप बस admin/base_site.html
टेम्पलेट को ओवरराइड करते हैं (टेम्पलेट से कॉपी करें django.contrib.admin.templates
और अपने स्वयं के व्यवस्थापक टेम्पलेट में डाल दें) और branding
ब्लॉक को बदलें ।