Come si modifica il testo "Amministrazione Django" nell'intestazione admin di django?
Non sembra essere coperto nella documentazione "Personalizzazione dell'amministratore".
Come si modifica il testo "Amministrazione Django" nell'intestazione admin di django?
Non sembra essere coperto nella documentazione "Personalizzazione dell'amministratore".
Risposte:
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
:
/projectdir/templates/
sia aggiunto in TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
sia aggiunto in TEMPLATE_LOADERS
.Consulta i documenti per ulteriori informazioni susettings.py
.
{% extends "admin/base.html" %}
a /<projectdir>/templates/admin/base_site.html
, e semplicemente ridefinire il blocco (s) è necessario, vale a dire {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
impostazione. A TEMPLATE_DIR
quanto pare basta
A partire da Django 1.7 non è necessario sovrascrivere i modelli. È ora possibile implementare site_header , site_title
e index_title
gli 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_header
tuo urls.py
o admin.py
direttamente senza sottoclasse AdminSite
:
admin.site.site_header = 'My administration'
admin_site
che hai creato. Mi piaceadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
modello, ad esempio password_reset), allora extra_context
dovrebbe 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"}})
admin.site.site_header
configurazione con cui app*/admin.py
avrebbe effetto?
C'è un modo semplice per impostare l'intestazione del sito di amministrazione: assegnarlo all'istanza di amministratore corrente in urls.py
questo 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
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
e 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
In urls.py
puoi 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 .
Una semplice soluzione completa in Django 1.8.3 basata sulle risposte a questa domanda.
In settings.py
aggiunta:
ADMIN_SITE_HEADER = "My shiny new administration"
In urls.py
aggiunta:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.py
. Se non lo hai già, crealo e non dimenticare di aggiungere from django.contrib import admin
.
ADMIN_SITE_HEADER
, l'unica cosa che conta qui è la linea inurls.py
Il modo più semplice per farlo assicurati di averlo
from django.contrib import admin
e poi basta aggiungerli nella parte inferiore url.py
dell'applicazione principale
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
Come puoi vedere nei modelli , il testo viene consegnato tramite il framework di localizzazione (nota l'uso del trans
tag template). È possibile apportare modifiche ai file di traduzione per sovrascrivere il testo senza creare la propria copia dei modelli.
mkdir locale
./manage.py makemessages
Modifica locale/en/LC_MESSAGES/django.po
, aggiungendo queste righe:
msgid "Django site admin"
msgstr "MySite site admin"
msgid "Django administration"
msgstr "MySite administration"
./manage.py compilemessages
Vedi https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
Vai al file admin.py e aggiungi questa riga nel file:
admin.site.site_header = "My Administration"
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
Non dimenticare di aggiungere questa riga.
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/
Da Django 2.0 puoi semplicemente aggiungere una sola riga in url.py
e 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 django
versione entro
django-admin --version
non è necessario modificare alcun modello per questo lavoro, è sufficiente aggiornare il settings.py
progetto. Vai in fondo al settings.py
e 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.
Esistono due metodi per farlo:
1] Con l'override base_site.html
in 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.py
directory 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
.
Basta sovrascrivere il admin/base_site.html
modello (copiare il modello da django.contrib.admin.templates
e inserire il proprio dir modello di amministrazione) e sostituire il branding
blocco.