Django Admin - ubah tajuk 'Administrasi Django'


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 .


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'

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


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 .


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

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" 

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'

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


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

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 <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/


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

5

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

admin.site.site_header = "My Administration"


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



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.


2

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

admin.site.site_header = 'My administration'

1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.