ผู้ดูแลระบบ 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.LoaderTEMPLATE_LOADERS

settings.pyดูเอกสารสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ


77
นอกจากนี้ทราบว่าคุณสามารถ{% extends "admin/base.html" %}ใน/<projectdir>/templates/admin/base_site.htmlและก็ redefine บล็อก (s) {% block branding %}...{% endblock %}ที่คุณต้องการคือ
Arnaud

12
แม้ว่าจะค่อนข้างเก่าฉันต้องการเพิ่มว่าคุณต้องใส่แอปของคุณในที่ที่คุณกำหนดเทมเพลตนี้ก่อน 'django.contrib.admin' ใน INSTALLED_APPS
DRC

1
ใน django 1.6 python 3.3 ข้างต้นใช้งานได้แม้ว่าคุณจะไม่ได้เพิ่มการTEMPLATE_LOADERตั้งค่า เพียงTEMPLATE_DIRก็พอดูเหมือน
lukik

12
สิ่งนี้ล้าสมัยแล้วจาก 1.7 ดูคำตอบของ Reto Aebersold
แอนดรูว์ B.

5
ลองสิ่งนี้ใน url.py admin.site.site_header = 'การบริหารของฉัน' admin.site.index_title = ('ผู้ดูแลระบบของฉัน') admin.site.site.site_title = ('หน้าผู้ดูแลระบบของฉัน')
Ashish Gupta

352

ในฐานะของ Django 1.7 คุณไม่จำเป็นต้องแทนที่เทมเพลต ตอนนี้คุณสามารถใช้site_header , site_titleและindex_titleแอตทริบิวต์ที่กำหนดเองบนAdminSiteในการสั่งซื้อเพื่อให้ง่ายต่อการเปลี่ยนชื่อหน้าและส่วนหัวของข้อความของเว็บไซต์ผู้ดูแลระบบ สร้างคลาสย่อย 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)),
)

ปรับปรุง : เป็นแหลมออกโดย oxfn คุณก็สามารถตั้งค่าsite_headerในของคุณurls.pyหรือadmin.pyโดยตรงโดยไม่ต้อง subclassing AdminSite:

admin.site.site_header = 'My administration'

11
สิ่งนี้จะแสดงข้อความแสดงข้อผิดพลาด "คุณไม่ได้รับอนุญาตให้แก้ไขอะไร" เมื่อฉันพยายามเข้าถึง / myadmin / ดูเหมือนว่าฉันควรจะเรียก. autodiscover แต่ Django 1.7 ควรจะถูกเรียกโดยอัตโนมัติ เบาะแสใด ๆ
David Arcos

3
@DavidArcos คุณต้องลงทะเบียนโมเดลของคุณด้วยสิ่งใหม่admin_siteที่คุณสร้างขึ้น ชอบadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
หากยังมีส่วนหัวใน django.auth.views ควรปรับแต่ง (ซึ่งขึ้นอยู่กับadmin/base_site.htmlแม่แบบเช่น password_reset) ก็extra_contextควรใช้ใน URL: เช่นurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

สิ่งที่ต้องรู้เกี่ยวกับวิธีนี้คือจะใช้งานได้กับหน้าผู้ดูแลระบบมาตรฐานเท่านั้นหากแอปพลิเคชันอื่นที่คุณเพิ่มหน้าผู้ดูแลระบบของคุณเอง (ขยายเทมเพลตฐานผู้ดูแลระบบ) พวกเขาจะใช้ค่าเริ่มต้น "Django Administration" หัวข้อ.
Kedare

1
@oxfn หากฉันมีมากกว่าหนึ่งแอพการadmin.site.site_headerตั้งค่าที่app*/admin.pyจะมีผล
nalzok

196

มีวิธีง่ายๆในการตั้งค่าส่วนหัวของไซต์ผู้ดูแลระบบ - กำหนดให้กับอินสแตนซ์ผู้ดูแลระบบปัจจุบันในurls.pyลักษณะนี้

admin.site.site_header = 'My admin'

หรือเราสามารถใช้เวทย์มนตร์สร้างหัวในวิธีแยกต่างหาก

admin.site.site_header = get_admin_header()

ดังนั้นในกรณีง่ายไม่จำเป็นต้อง subclass AdminSite


1
วิธีแรกทำงาน ฉันไม่รู้จริงๆว่าปัญหาคืออะไรในขณะนี้ ขอบคุณ
Alex Jolig

4
admin.site.site_title = 'My site admin'หากคุณกำลังจะเปลี่ยนส่วนหัวของคุณอาจจะยังต้องการที่จะเปลี่ยนชื่อเว็บไซต์ซึ่งสามารถทำได้ด้วย:
mcastle

1
นี่คือสตริงการนำเข้าที่จะเพิ่มurls.py:from django.contrib import admin
serg

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?
Venkat Kotra

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
Flimm

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 อย่าลืมเพิ่มบรรทัดนี้
rkdevs

5

ก่อนอื่นคุณควรเพิ่ม template / admin / base_site.html ในโครงการของคุณ ไฟล์นี้สามารถเขียนทับได้อย่างปลอดภัยเนื่องจากเป็นไฟล์ที่ Django devs ตั้งใจไว้สำหรับวัตถุประสงค์ในการกำหนดไซต์ผู้ดูแลระบบของคุณเล็กน้อย นี่คือตัวอย่างของสิ่งที่จะใส่ในไฟล์:

{% 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-title/


การลิงก์ไปยังไซต์ภายนอกถือว่าไม่ดีเนื่องจากลิงก์อาจไม่ดี คุณควรที่จะเขียนคำตอบจากเว็บไซต์ที่นี่

ฉันเขียนคำตอบใหม่ในกรณีที่คุณไม่ต้องการออกไปข้างนอกไซต์
Soroosh

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บล็อก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.