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.Loadersia 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_LOADERimpostazione. A TEMPLATE_DIRquanto pare basta
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'
admin_siteche hai creato. Mi piaceadmin_site.register(MyModel, ModelAdmin)
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"}})
admin.site.site_headerconfigurazione con cui app*/admin.pyavrebbe effetto?
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
admin.site.site_title = 'My site admin'.
urls.py:from django.contrib import admin
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
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 .
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
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.pydell'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 transtag 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.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
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.
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.
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.