Bagaimana seseorang mengubah teks 'Administrasi Django' di header admin django?
Tampaknya tidak tercakup dalam dokumentasi "Menyesuaikan admin".
Bagaimana seseorang mengubah teks 'Administrasi Django' di header admin django?
Tampaknya tidak tercakup dalam dokumentasi "Menyesuaikan admin".
Jawaban:
Pembaruan : Jika Anda menggunakan Django 1.7+, lihat jawabannya di bawah ini .
Jawaban asli dari 2011:
Anda harus membuat admin sendiribase_site.html
template untuk melakukan ini. Cara termudah adalah dengan membuat file:
/<projectdir>/templates/admin/base_site.html
Ini harus merupakan salinan aslibase_site.html
, kecuali memasukkan judul khusus Anda:
{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}
Agar ini berfungsi, Anda harus memiliki pengaturan yang benar untuk proyek Anda, yaitu di settings.py
:
/projectdir/templates/
ditambahkan ke TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
ditambahkan ke TEMPLATE_LOADERS
.Lihat dokumen untuk informasi lebih lanjut tentangsettings.py
.
{% extends "admin/base.html" %}
masuk /<projectdir>/templates/admin/base_site.html
, dan cukup mendefinisikan kembali blok yang Anda butuhkan, yaitu {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
pengaturan. Cukup TEMPLATE_DIR
sudah cukup rasanya
Pada Django 1.7 Anda tidak perlu mengganti template. Anda sekarang dapat menerapkan site_header ,, site_title
dan index_title
atribut pada AdminSite khusus untuk dengan mudah mengubah judul halaman dan teks header situs admin. Buat subclass AdminSite dan kaitkan instance Anda ke URLconf Anda:
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)),
)
Pembaruan : Seperti yang ditunjukkan oleh oxfn, Anda cukup mengatur site_header
di urls.py
atau admin.py
langsung tanpa subklas AdminSite
:
admin.site.site_header = 'My administration'
admin_site
yang Anda buat. Sukaadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
templat, mis. Password_reset) maka juga extra_context
harus digunakan dalam url: egurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
admin.site.site_header
konfigurasi di mana app*/admin.py
akan berlaku?
Ada cara mudah untuk mengatur header situs admin - tetapkan ke instance admin saat urls.py
ini seperti ini
admin.site.site_header = 'My admin'
Atau seseorang dapat mengimplementasikan beberapa sihir pembangun tajuk dengan metode terpisah
admin.site.site_header = get_admin_header()
Jadi, dalam kasus-kasus sederhana tidak perlu subkelas AdminSite
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
dan menghabiskan beberapa saat mencoba membuatnya bekerja dengan autodiscover()
tetapi akhirnya memikirkan solusi ini sendiri. Saya benar-benar mengesampingkan saya admin.py
, yang saya pikir lebih bersih karena disimpan bersama dengan semua logika terkait admin lainnya
Di dalam urls.py
Anda dapat mengganti 3 variabel paling penting:
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"
Referensi: Dokumentasi Django tentang atribut-atribut ini .
Solusi lengkap sederhana di Django 1.8.3 berdasarkan jawaban dalam pertanyaan ini.
Di settings.py
tambahkan:
ADMIN_SITE_HEADER = "My shiny new administration"
Di urls.py
tambahkan:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.py
. Jika Anda belum memilikinya, buat saja dan jangan lupa untuk menambahkan from django.contrib import admin
.
ADMIN_SITE_HEADER
, satu-satunya hal yang penting di sini adalah garis masukurls.py
Cara termudah untuk melakukannya pastikan Anda memilikinya
from django.contrib import admin
dan kemudian tambahkan ini di bagian bawah url.py
aplikasi utama Anda
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
Seperti yang dapat Anda lihat di templat , teks dikirim melalui kerangka kerja pelokalan (perhatikan penggunaan trans
tag templat). Anda dapat membuat perubahan pada file terjemahan untuk mengganti teks tanpa membuat salinan template Anda sendiri.
mkdir locale
./manage.py makemessages
Edit locale/en/LC_MESSAGES/django.po
, tambahkan baris ini:
msgid "Django site admin"
msgstr "MySite site admin"
msgid "Django administration"
msgstr "MySite administration"
./manage.py compilemessages
Lihat 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
Jangan lupa untuk menambahkan baris ini.
Pertama-tama, Anda harus menambahkan template / admin / base_site.html ke proyek Anda. File ini dapat dengan aman ditimpa karena ini adalah file yang dimaksudkan para pengembang Django untuk tujuan yang tepat untuk menyesuaikan situs admin Anda sedikit. Berikut adalah contoh dari apa yang dimasukkan ke dalam file:
{% 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 %}
Ini adalah praktik umum. Tapi saya perhatikan setelah ini bahwa saya masih tersisa dengan "Administrasi Situs" yang mengganggu di halaman indeks admin utama. Dan string ini tidak ada di dalam salah satu template, melainkan di dalam tampilan admin. Untungnya itu cukup mudah untuk diubah. Dengan asumsi bahasa Anda disetel ke bahasa Inggris, jalankan perintah berikut dari direktori proyek Anda:
$ mkdir locale
$ ./manage.py makemessages -l en
Sekarang buka file locale / en / LC_MESSAGES / django.po dan tambahkan dua baris setelah informasi header (dua baris terakhir dari contoh ini)
"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"
Setelah ini, ingatlah untuk menjalankan perintah berikut dan memuat kembali server proyek Anda:
$ ./manage.py compilemessages
sumber: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/
Dari Django 2.0 Anda bisa menambahkan satu baris di url.py
dan mengubah nama.
# url.py
from django.contrib import admin
admin.site.site_header = "My Admin Central" # Add this
Untuk versi Django yang lebih lama . (<1,11 dan sebelumnya) Anda perlu mengeditadmin/base_site.html
Ubah baris ini
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
untuk
{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}
Anda dapat memeriksa django
versi Anda dengan
django-admin --version
Buka saja file admin.py dan tambahkan baris ini di file:
admin.site.site_header = "My Administration"
Anda tidak perlu mengubah template apa pun untuk pekerjaan ini, Anda hanya perlu memperbarui settings.py
proyek Anda. Pergi ke bawah settings.py
dan tentukan ini.
admin.site.site_header = 'My Site Admin'
Dengan cara ini Anda akan dapat mengubah header dari admin Django. Selain itu, Anda dapat membaca lebih lanjut tentang penyesuaian dan pengaturan Admin Django pada tautan berikut.
Anda dapat menggunakannya AdminSite.site_header
untuk mengubah teks itu. Ini dokumennya
Ada dua metode untuk melakukan ini:
1] Dengan meng-override base_site.html
di django/contrib/admin/templates/admin/base_site.html
: Mengikuti adalah isi dari 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 %}
Edit site_title & site_header dalam cuplikan kode di atas. Metode ini berfungsi tetapi tidak dianjurkan karena merupakan perubahan statis.
2] Dengan menambahkan baris berikut dalam urls.py
direktori proyek:
admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"
Metode ini direkomendasikan satu karena kita dapat mengubah header situs, judul situs & indeks-judul tanpa mengedit base_site.html
.
Anda tinggal mengganti admin/base_site.html
template (salin template dari django.contrib.admin.templates
dan masukkan dir template admin Anda sendiri) dan ganti branding
blokir.