Django व्यवस्थापक - हेडर बदलें 'Django प्रशासन' पाठ


201

Django के व्यवस्थापक शीर्ष लेख में 'Django प्रशासन' पाठ को कैसे बदल सकता है?

यह "व्यवस्थापक को अनुकूलित करना" दस्तावेज़ में शामिल नहीं किया गया है।


यह ट्यूटोरियल में कवर किया गया है ।
djvg

जवाबों:


139

अद्यतन : यदि आप 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

अधिक जानकारी के लिए डॉक्स देखेंsettings.py


77
यह भी ध्यान दें कि आप उस ब्लॉक को फिर से परिभाषित कर सकते {% extends "admin/base.html" %}हैं /<projectdir>/templates/admin/base_site.html, जिसकी आपको आवश्यकता है, यानी {% block branding %}...{% endblock %}
अरनौद

12
यहां तक ​​कि अगर बहुत पुराना है, तो मैं आपको जोड़ना चाहता हूं कि आपको अपना ऐप डालना होगा जहां आप 'django.contrib.admin' से पहले इस टेम्पलेट को परिभाषित करते हैं, INSTALLED_APPS में
DRC

1
Django 1.6 python 3.3 में, जब आप TEMPLATE_LOADERसेटिंग नहीं जोड़ते हैं तब भी उपरोक्त कार्य करता है । बस TEMPLATE_DIRइतना ही काफी है
lukik

12
यह 1.7 के रूप में पुराना है। देखें रिटो एबॉर्स्ल्ड का जवाब।
एंड्रयू बी।

5
इसे url.py admin.site.site_header = 'My व्यवस्थापन' admin.site.index_title = ('मेरा व्यवस्थापन') admin.site.site_title = ('मेरा व्यवस्थापक पृष्ठ')
आशीष गुप्ता

352

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'

11
जब मैं / myadmin तक पहुँचने का प्रयास करता हूं तो "आपको कुछ भी संपादित करने की अनुमति नहीं है" त्रुटि संदेश। ऐसा लगता है कि मुझे .autodiscover को कॉल करना चाहिए, लेकिन Django 1.7 को स्वचालित रूप से कहा जाना चाहिए। कोई सुराग?
डेविड आर्कोस

3
@DavidArcos आपके द्वारा बनाए गए नए मॉडल को पंजीकृत करने की आवश्यकता है admin_site। जैसेadmin_site.register(MyModel, ModelAdmin)
एंड्री फेडोज़ेव

1
यदि django.auth.views में एक हेडर भी अनुकूलित किया जाना चाहिए (जो admin/base_site.htmlटेम्पलेट पर निर्भर करता है , जैसे पासवर्ड_ पासवर्ड) तो इसे भी extra_contexturl में उपयोग किया जाना चाहिए: जैसेurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

इस तरह से जानने के लिए कुछ है कि यह केवल मानक व्यवस्थापक पृष्ठों के साथ काम करेगा, यदि आपकी ओर से किसी अन्य एप्लिकेशन पर आप अपने स्वयं के व्यवस्थापक पृष्ठ (व्यवस्थापक आधार टेम्पलेट का विस्तार करें) जोड़ रहे हैं, तो वे हमेशा डिफ़ॉल्ट "Django व्यवस्थापन" लेंगे शीर्षक।
केदार

1
@oxfn यदि मेरे पास एक से अधिक ऐप्स हैं, तो admin.site.site_headerकॉन्फ़िगरेशन किसमें app*/admin.pyप्रभावी होगा?
नालज़ोक

196

व्यवस्थापक साइट हेडर सेट करने का एक आसान तरीका है - इसे urls.pyइस तरह से वर्तमान व्यवस्थापक उदाहरण में असाइन करें

admin.site.site_header = 'My admin'

या कोई अलग तरीके से कुछ हेडर-बिल्डिंग मैजिक को लागू कर सकता है

admin.site.site_header = get_admin_header()

इस प्रकार, सरल मामलों में उपवर्ग की कोई आवश्यकता नहीं है AdminSite


1
पहला रास्ता काम किया। मैं वास्तव में नहीं जानता कि इस समय समस्या क्या थी। धन्यवाद
एलेक्स जोलीग

4
यदि आप हेडर बदल रहे हैं, तो आप संभवतः साइट का शीर्षक भी बदलना चाहेंगे, जिसे इसके साथ पूरा किया जा सकता है admin.site.site_title = 'My site admin':।
मैस्केल

1
यहाँ जोड़ने के लिए एक आयात स्ट्रिंग है urls.py:from django.contrib import admin
सर्ग

4
काश मुझे यह पहले मिल जाता ... डॉक्स का मार्गदर्शन करना, मैंने उप-वर्गित किया AdminSiteऔर इसे काम करने की कोशिश में कुछ समय बिताया autodiscover()लेकिन आखिरकार इस समाधान के बारे में सोचा। मेरे पास वास्तव में मेरा ओवरराइड है admin.py, जो मुझे लगता है कि क्लीनर है क्योंकि यह अन्य सभी व्यवस्थापक-संबंधित तर्क के साथ रखा गया है
user193130

1
उन सभी विशेषताओं की सूची देखें जिन्हें आप docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

में 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 प्रलेखन


65

इस सवाल के जवाब के आधार पर 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

7
क्या urls.py का उपयोग करने की तुलना में ऐसा करने के लिए एक बेहतर जगह है?
वेंकट कोटरा

2
@VenkatKotra हां, में admin.py। यदि आपके पास पहले से नहीं है, तो बस इसे बनाएं और जोड़ना न भूलें from django.contrib import admin
user193130

3
सेटिंग आयात करने का अनुशंसित तरीका है - "django.conf आयात सेटिंग्स से" ( docs.djangoproject.com/en/1.9/topics/settings/… ) देखें
yoniLavi

1
कोई भी सेटिंग नहीं है जो Django को बुलाया जाता है ADMIN_SITE_HEADER, केवल एक चीज जो यहां मायने रखती है वह हैurls.py
फ्लिम्म

16

यह करने का सबसे आसान तरीका सुनिश्चित करें कि आपके पास है

from django.contrib import admin

और फिर बस url.pyआप मुख्य आवेदन के नीचे ये जोड़ दें

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 

15

Django 2.1.1 के लिए निम्न पंक्तियों को जोड़ें urls.py

from django.contrib import admin

# Admin Site Config
admin.sites.AdminSite.site_header = 'My site admin header'
admin.sites.AdminSite.site_title = 'My site admin title'
admin.sites.AdminSite.index_title = 'My site admin index'

10

जैसा कि आप टेम्प्लेट में देख सकते हैं , टेक्स्ट को स्थानीयकरण ढांचे ( transटेम्पलेट टैग के उपयोग पर ध्यान दें) के माध्यम से दिया गया है । आप टेम्प्लेट की अपनी प्रति बनाए बिना पाठ को ओवरराइड करने के लिए अनुवाद फ़ाइलों में परिवर्तन कर सकते हैं।

  1. mkdir locale

  2. ./manage.py makemessages

  3. locale/en/LC_MESSAGES/django.poइन पंक्तियों को संपादित करें :

    msgid "Django site admin"
    msgstr "MySite site admin"
    
    msgid "Django administration"
    msgstr "MySite administration"
  4. ./manage.py compilemessages

Https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files देखें


1
यह एक भयानक समाधान है। अनुवाद स्ट्रिंग को ओवरराइड करना केवल एक भयानक विचार है।

5

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')

1
from django.utils.translation import ugettext_lazy इस पंक्ति को जोड़ना न भूलें।
आरकेदेव्स r

5

सबसे पहले, आपको अपने प्रोजेक्ट में टेम्प्लेट / एडमिन / 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/


बाहरी साइटों से लिंक करना बुरा माना जाता है, क्योंकि लिंक खराब हो सकता है। आपको यहां साइट से उत्तर को फिर से लिखने के लिए प्रोत्साहित किया जाता है।

यदि आप बाहरी साइट पर नहीं जाना चाहते हैं तो मैं उत्तर को फिर से लिखता हूं।
सोरोश

5

से 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


3

इस काम के लिए आपको कोई खाका बदलने की जरूरत नहीं है, बस आपको settings.pyअपनी परियोजना को अपडेट करने की जरूरत है । के नीचे जाएं settings.pyऔर इसे परिभाषित करें।

admin.site.site_header = 'My Site Admin'

इस तरह आप Django एडमिन के हेडर को बदल पाएंगे। इसके अलावा आप निम्नलिखित लिंक पर Django व्यवस्थापक अनुकूलन और सेटिंग्स के बारे में अधिक पढ़ सकते हैं।

Django व्यवस्थापक प्रलेखन



3

ऐसा करने के लिए दो तरीके हैं:

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


2

चूंकि मैं अपने ऐप में केवल व्यवस्थापक इंटरफ़ेस का उपयोग करता हूं, इसलिए मैंने इसे admin.py में रखा:

admin.site.site_header = 'My administration'

1

आप बस admin/base_site.htmlटेम्पलेट को ओवरराइड करते हैं (टेम्पलेट से कॉपी करें django.contrib.admin.templatesऔर अपने स्वयं के व्यवस्थापक टेम्पलेट में डाल दें) और brandingब्लॉक को बदलें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.