Django Admin - ubah tajuk 'Administrasi Django'

201

Bagaimana seseorang mengubah teks 'Administrasi Django' di header admin django?

Tampaknya tidak tercakup dalam dokumentasi "Menyesuaikan admin".

samurailawngnome
sumber
Ini tercakup dalam tutorial .
djvg

Jawaban:

139

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 :

  • Yakinkan /projectdir/templates/ditambahkan ke TEMPLATE_DIRS.
  • Pastikan django.template.loaders.filesystem.Loaderditambahkan ke TEMPLATE_LOADERS.

Lihat dokumen untuk informasi lebih lanjut tentangsettings.py .

pengguna608133
sumber
77
Perhatikan juga bahwa Anda dapat {% extends "admin/base.html" %}masuk /<projectdir>/templates/admin/base_site.html, dan cukup mendefinisikan kembali blok yang Anda butuhkan, yaitu {% block branding %}...{% endblock %}.
Arnaud
12
bahkan jika cukup lama, saya ingin menambahkan bahwa Anda harus meletakkan aplikasi Anda di mana Anda mendefinisikan template ini sebelum 'django.contrib.admin', di INSTALLED_APPS
DRC
1
Dalam django 1.6 python 3.3, hal di atas berfungsi bahkan ketika Anda tidak menambahkan TEMPLATE_LOADERpengaturan. Cukup TEMPLATE_DIRsudah cukup rasanya
lukik
12
Ini sudah ketinggalan zaman sejak 1.7. Lihat jawaban Reto Aebersold.
Andrew B.
5
Coba ini di url.py admin.site.site_header = 'Administrasi Saya' admin.site.index_title = ('Admin Saya') admin.site.site_title = ('Halaman Admin Saya')
Ashish Gupta
352

Pada Django 1.7 Anda tidak perlu mengganti template. Anda sekarang dapat menerapkan site_header ,, site_titledan index_titleatribut 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_headerdi urls.pyatau admin.pylangsung tanpa subklas AdminSite:

admin.site.site_header = 'My administration'
Reto Aebersold
sumber
11
Ini melempar pesan kesalahan "Anda tidak memiliki izin untuk mengedit apa pun" ketika saya mencoba mengakses / myadmin /. Sepertinya saya harus memanggil .autodiscover, tetapi Django 1.7 itu seharusnya dipanggil secara otomatis. Ada petunjuk?
David Arcos
3
@ DavidArcos Anda harus mendaftarkan model Anda di baru admin_siteyang Anda buat. Sukaadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev
1
Jika juga tajuk di django.auth.views harus dikustomisasi (itu tergantung pada admin/base_site.htmltemplat, mis. Password_reset) maka juga extra_contextharus digunakan dalam url: egurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer
Sesuatu yang perlu diketahui tentang cara ini adalah bahwa ia hanya akan berfungsi dengan halaman admin standar, jika di sisi Anda pada aplikasi lain Anda menambahkan halaman admin Anda sendiri (memperpanjang template basis admin), mereka akan selalu mengambil "Django Administration" default. judul.
Kedare
1
@oxfn Jika saya memiliki lebih dari satu aplikasi, admin.site.site_headerkonfigurasi di mana app*/admin.pyakan berlaku?
nalzok
196

Ada cara mudah untuk mengatur header situs admin - tetapkan ke instance admin saat urls.pyini 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

oxfn
sumber
1
Cara pertama berhasil. Saya tidak benar-benar tahu apa masalahnya saat ini. terima kasih
Alex Jolig
4
Jika Anda mengubah header, Anda mungkin juga ingin mengubah judul situs, yang dapat dicapai dengan: admin.site.site_title = 'My site admin'.
mcastle
1
Berikut ini adalah string impor untuk ditambahkan urls.py:from django.contrib import admin
serg
4
Seandainya saya menemukan ini dulu ... Mengindahkan dokumen, saya subklas AdminSitedan 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
user193130
1
periksa daftar semua atribut yang dapat Anda ubah di docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini
96

Di dalam urls.pyAnda 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 .

Gregory
sumber
65

Solusi lengkap sederhana di Django 1.8.3 berdasarkan jawaban dalam pertanyaan ini.

Di settings.pytambahkan:

ADMIN_SITE_HEADER = "My shiny new administration"

Di urls.pytambahkan:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
kuzava
sumber
7
Apakah ada tempat yang lebih baik untuk melakukan ini daripada menggunakan urls.py?
Venkat Kotra
2
@VenkatKotra Ya, di admin.py. Jika Anda belum memilikinya, buat saja dan jangan lupa untuk menambahkan from django.contrib import admin.
user193130
3
Cara yang disarankan untuk mengimpor pengaturan adalah melalui - "dari django.conf pengaturan impor" (lihat docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi
1
Tidak ada pengaturan yang dilihat Django ADMIN_SITE_HEADER, satu-satunya hal yang penting di sini adalah garis masukurls.py
Flimm
16

Cara termudah untuk melakukannya pastikan Anda memilikinya

from django.contrib import admin

dan kemudian tambahkan ini di bagian bawah url.pyaplikasi utama Anda

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 
Muhammad Abrar Anwar
sumber
15

Untuk Django 2.1.1 tambahkan baris berikut ke 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'
Ganesha
sumber
10

Seperti yang dapat Anda lihat di templat , teks dikirim melalui kerangka kerja pelokalan (perhatikan penggunaan transtag templat). Anda dapat membuat perubahan pada file terjemahan untuk mengganti teks tanpa membuat salinan template Anda sendiri.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Edit locale/en/LC_MESSAGES/django.po, tambahkan baris ini:

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

Lihat https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files

Wedgwood
sumber
1
Ini solusi yang mengerikan. Mengganti string terjemahan hanyalah ide yang mengerikan.
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')
Fakher Meddeb
sumber
1
from django.utils.translation import ugettext_lazy Jangan lupa untuk menambahkan baris ini.
rkdevs
5

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 <[email protected]>\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/

Soroosh
sumber
Menautkan ke situs luar dianggap buruk, karena tautannya mungkin rusak. Anda dianjurkan untuk menulis ulang jawaban dari situs di sini.
Saya menulis ulang jawaban jika Anda tidak ingin pergi ke luar situs.
Soroosh
5

Dari Django 2.0 Anda bisa menambahkan satu baris di url.pydan 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 djangoversi Anda dengan

django-admin --version
Tessaracter
sumber
5

Buka saja file admin.py dan tambahkan baris ini di file:

admin.site.site_header = "My Administration"

Prateek Gupta
sumber
3

Anda tidak perlu mengubah template apa pun untuk pekerjaan ini, Anda hanya perlu memperbarui settings.pyproyek Anda. Pergi ke bawah settings.pydan 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.

Dokumentasi Admin Django

Chitrank Dixit
sumber
3

Anda dapat menggunakannya AdminSite.site_headeruntuk mengubah teks itu. Ini dokumennya

YasinYA
sumber
3

Ada dua metode untuk melakukan ini:

1] Dengan meng-override base_site.htmldi 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.pydirektori 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.

Pranav Bhendawade
sumber
2

Karena saya hanya menggunakan antarmuka admin di aplikasi saya, saya meletakkan ini di admin.py:

admin.site.site_header = 'My administration'
numahell
sumber
1

Anda tinggal mengganti admin/base_site.htmltemplate (salin template dari django.contrib.admin.templatesdan masukkan dir template admin Anda sendiri) dan ganti brandingblokir.

Yuji 'Tomita' Tomita
sumber