Django Admin: modifica il testo dell'intestazione "Amministrazione Django"


202

Come si modifica il testo "Amministrazione Django" nell'intestazione admin di django?

Non sembra essere coperto nella documentazione "Personalizzazione dell'amministratore".


Questo è trattato nel tutorial .
DJVG

Risposte:


139

Aggiornamento : se si utilizza Django 1.7+, vedere la risposta di seguito .


Risposta originale del 2011:base_site.html per farlo, devi creare il tuo modello di amministratore . Il modo più semplice è creare il file:

/<projectdir>/templates/admin/base_site.html

Questa dovrebbe essere una copia dell'originalebase_site.html , tranne per il fatto di inserire il titolo personalizzato:

{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}

Affinché ciò funzioni, è necessario disporre delle impostazioni corrette per il progetto, in particolare in settings.py:

  • Assicurarsi che /projectdir/templates/sia aggiunto in TEMPLATE_DIRS.
  • Assicurarsi che django.template.loaders.filesystem.Loadersia aggiunto in TEMPLATE_LOADERS.

Consulta i documenti per ulteriori informazioni susettings.py .


77
Si noti inoltre che è possibile {% extends "admin/base.html" %}a /<projectdir>/templates/admin/base_site.html, e semplicemente ridefinire il blocco (s) è necessario, vale a dire {% block branding %}...{% endblock %}.
Arnaud,

12
anche se piuttosto vecchio, voglio aggiungere che devi posizionare la tua app dove definisci questo modello prima di 'django.contrib.admin', in INSTALLED_APPS
DRC il

1
In django 1.6 python 3.3, quanto sopra funziona anche quando non aggiungi l' TEMPLATE_LOADERimpostazione. A TEMPLATE_DIRquanto pare basta
lukik il

12
Questo è obsoleto al 1.7. Vedi la risposta di Reto Aebersold.
Andrew B.

5
Prova questo in url.py admin.site.site_header = 'La mia amministrazione' admin.site.index_title = ('La mia amministrazione') admin.site.site_title = ('La mia pagina di amministrazione')
Ashish Gupta

352

A partire da Django 1.7 non è necessario sovrascrivere i modelli. È ora possibile implementare site_header , site_titlee index_titlegli attributi su un costume AdminSite al fine di cambiare facilmente il titolo della pagina del sito di amministrazione e il testo di intestazione. Crea una sottoclasse AdminSite e aggancia la tua istanza al tuo 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)),
)

Aggiornamento : Come sottolineato da oxfn puoi semplicemente impostare il site_headertuo urls.pyo admin.pydirettamente senza sottoclasse AdminSite:

admin.site.site_header = 'My administration'

11
Questo genera un messaggio di errore "Non hai i permessi per modificare nulla" quando provo ad accedere a / myadmin /. Sembra che dovrei chiamare .autodiscover, ma Django 1.7 dovrebbe essere chiamato automaticamente. Qualche idea?
David Arcos,

3
@DavidArcos Devi registrare i tuoi modelli nel nuovo admin_siteche hai creato. Mi piaceadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev il

1
Se anche un'intestazione in django.auth.views deve essere personalizzata (dipende dal admin/base_site.htmlmodello, ad esempio password_reset), allora extra_contextdovrebbe essere utilizzata anche negli URL: ad es.url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer,

Una cosa da sapere in questo modo è che funzionerà solo con le pagine di amministrazione standard, se dalla tua parte su un'altra applicazione stai aggiungendo le tue pagine di amministrazione (estendi il modello di base di amministrazione), prenderanno sempre la "Amministrazione Django" predefinita titolo.
Kedare,

1
@oxfn Se avessi più di un'app, la admin.site.site_headerconfigurazione con cui app*/admin.pyavrebbe effetto?
nalzok,

196

C'è un modo semplice per impostare l'intestazione del sito di amministrazione: assegnarlo all'istanza di amministratore corrente in urls.pyquesto modo

admin.site.site_header = 'My admin'

Oppure si può implementare un po 'di magia per la costruzione di intestazioni in un metodo separato

admin.site.site_header = get_admin_header()

Pertanto, in casi semplici non è necessario eseguire la sottoclasse AdminSite


1
Il primo modo ha funzionato. Non so davvero quale fosse il problema al momento. grazie
Alex Jolig,

4
Se stai cambiando l'intestazione, probabilmente anche desidera modificare il titolo del sito, che può essere realizzato con: admin.site.site_title = 'My site admin'.
mcastle,

1
Ecco una stringa di importazione da aggiungere a urls.py:from django.contrib import admin
serg

4
Vorrei averlo trovato prima ... Seguendo i documenti, ho fatto una sottoclasse AdminSitee ho passato un po 'a cercare di farlo funzionare, autodiscover()ma alla fine ho pensato a questa soluzione da solo. In realtà ho il mio override admin.py, che penso sia più pulito dal momento che è mantenuto insieme a tutte le altre logiche relative
all'amministratore

1
controlla l'elenco di tutti gli attributi che puoi modificare su docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

In urls.pypuoi sovrascrivere le 3 variabili più importanti:

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"

Riferimento: documentazione Django su questi attributi .


65

Una semplice soluzione completa in Django 1.8.3 basata sulle risposte a questa domanda.

In settings.pyaggiunta:

ADMIN_SITE_HEADER = "My shiny new administration"

In urls.pyaggiunta:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER

7
C'è un posto migliore per farlo che usare urls.py?
Venkat Kotra,

2
@VenkatKotra Sì, in admin.py. Se non lo hai già, crealo e non dimenticare di aggiungere from django.contrib import admin.
user193130,

3
Il modo consigliato per importare le impostazioni è tramite - "from django.conf import settings" (vedi docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi

1
Non c'è nessuna impostazione che Django guardi chiamato ADMIN_SITE_HEADER, l'unica cosa che conta qui è la linea inurls.py
Flimm

16

Il modo più semplice per farlo assicurati di averlo

from django.contrib import admin

e poi basta aggiungerli nella parte inferiore url.pydell'applicazione principale

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 

15

Per Django 2.1.1 aggiungere le seguenti righe a 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

Come puoi vedere nei modelli , il testo viene consegnato tramite il framework di localizzazione (nota l'uso del transtag template). È possibile apportare modifiche ai file di traduzione per sovrascrivere il testo senza creare la propria copia dei modelli.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Modifica locale/en/LC_MESSAGES/django.po, aggiungendo queste righe:

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

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


1
Questa è una soluzione terribile. Sostituire le stringhe di traduzione è solo una brutta idea.

6

Vai al file admin.py e aggiungi questa riga nel file:

admin.site.site_header = "My Administration"


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 Non dimenticare di aggiungere questa riga.
rkdevs,

5

Prima di tutto, dovresti aggiungere template / admin / base_site.html al tuo progetto. Questo file può essere sovrascritto in modo sicuro poiché è un file che gli sviluppatori di Django hanno progettato allo scopo esatto di personalizzare un po 'il tuo sito di amministrazione. Ecco un esempio di cosa inserire nel 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 %}

Questa è pratica comune. Ma dopo ciò ho notato che mi rimaneva ancora una fastidiosa "Amministrazione del sito" sulla pagina principale dell'indice di amministrazione. E questa stringa non si trovava all'interno di nessuno dei modelli, ma piuttosto all'interno della vista di amministrazione. Fortunatamente è abbastanza facile cambiare. Supponendo che la tua lingua sia impostata su inglese, esegui i seguenti comandi dalla directory del progetto:

$ mkdir locale
$ ./manage.py makemessages -l en

Ora apri il file locale / it / LC_MESSAGES / django.po e aggiungi due righe dopo le informazioni di intestazione (le ultime due righe di questo esempio)

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

Successivamente, ricordati di eseguire il comando seguente e ricaricare il server del tuo progetto:

$ ./manage.py compilemessages

fonte: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/


Il collegamento a siti esterni è considerato negativo, poiché il collegamento potrebbe andare a male. Sei invitato a riscrivere la risposta dal sito qui.

Ho riscritto la risposta nel caso in cui non volessi uscire dal sito.
Soroosh,

5

Da Django 2.0 puoi semplicemente aggiungere una sola riga in url.pye cambiare il nome.

# url.py

from django.contrib import admin 
admin.site.site_header = "My Admin Central" # Add this

Per le versioni precedenti di Django. (<1.11 e precedenti) è necessario modificareadmin/base_site.html

Cambia questa linea

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

per

{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}

Puoi controllare la tua djangoversione entro

django-admin --version

3

non è necessario modificare alcun modello per questo lavoro, è sufficiente aggiornare il settings.pyprogetto. Vai in fondo al settings.pye definiscilo.

admin.site.site_header = 'My Site Admin'

In questo modo saresti in grado di cambiare l'intestazione dell'amministratore di Django. Inoltre puoi leggere di più sulla personalizzazione e le impostazioni di Django Admin al seguente link.

Documentazione di amministrazione di Django



3

Esistono due metodi per farlo:

1] Con l'override base_site.htmlin django/contrib/admin/templates/admin/base_site.html: segue è il contenuto di 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 %}

Modifica site_title & site_header nello snippet di codice sopra riportato. Questo metodo funziona ma non è consigliabile poiché è una modifica statica.

2] Aggiungendo le seguenti righe nella urls.pydirectory del progetto:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"

Questo metodo è consigliato in quanto possiamo modificare l'intestazione del sito, il titolo del sito e il titolo dell'indice senza modificarli base_site.html.


2

Poiché utilizzo solo l'interfaccia di amministrazione nella mia app, inserisco questo in admin.py:

admin.site.site_header = 'My administration'

1

Basta sovrascrivere il admin/base_site.htmlmodello (copiare il modello da django.contrib.admin.templatese inserire il proprio dir modello di amministrazione) e sostituire il brandingblocco.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.