หนึ่งจะเปลี่ยนข้อความ 'การบริหาร 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
settings.py
ดูเอกสารสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ
{% extends "admin/base.html" %}
ใน/<projectdir>/templates/admin/base_site.html
และก็ redefine บล็อก (s) {% block branding %}...{% endblock %}
ที่คุณต้องการคือ
TEMPLATE_LOADER
ตั้งค่า เพียงTEMPLATE_DIR
ก็พอดูเหมือน
ในฐานะของ 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'
admin_site
ที่คุณสร้างขึ้น ชอบadmin_site.register(MyModel, ModelAdmin)
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"}})
admin.site.site_header
ตั้งค่าที่app*/admin.py
จะมีผล
มีวิธีง่ายๆในการตั้งค่าส่วนหัวของไซต์ผู้ดูแลระบบ - กำหนดให้กับอินสแตนซ์ผู้ดูแลระบบปัจจุบันในurls.py
ลักษณะนี้
admin.site.site_header = 'My admin'
หรือเราสามารถใช้เวทย์มนตร์สร้างหัวในวิธีแยกต่างหาก
admin.site.site_header = get_admin_header()
ดังนั้นในกรณีง่ายไม่จำเป็นต้อง subclass 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"
สำหรับ 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'
ดังที่คุณเห็นในเทมเพลตข้อความจะถูกส่งผ่านกรอบงานการแปล (หมายเหตุการใช้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
อย่าลืมเพิ่มบรรทัดนี้
ก่อนอื่นคุณควรเพิ่ม 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/
จาก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 ได้ที่ลิงค์ต่อไปนี้
คุณสามารถใช้AdminSite.site_header
เพื่อเปลี่ยนข้อความ นี่คือเอกสาร
มีสองวิธีในการทำสิ่งนี้:
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.py:
admin.site.site_header = 'My administration'
คุณเพียงแค่แทนที่admin/base_site.html
เทมเพลต (คัดลอกเทมเพลตจากdjango.contrib.admin.templates
และใส่เทมเพลตผู้ดูแลระบบของคุณเอง) และแทนที่branding
บล็อก