Wie ändert man den Text 'Django Administration' im Django Admin Header?
Es scheint nicht in der Dokumentation "Anpassen des Administrators" behandelt zu werden.
Wie ändert man den Text 'Django Administration' im Django Admin Header?
Es scheint nicht in der Dokumentation "Anpassen des Administrators" behandelt zu werden.
Antworten:
Update : Wenn Sie Django 1.7+ verwenden, lesen Sie die Antwort unten .
Ursprüngliche Antwort aus dem Jahr 2011:base_site.html
Dazu
müssen Sie eine eigene Admin- Vorlage erstellen . Am einfachsten ist es, die Datei zu erstellen:
/<projectdir>/templates/admin/base_site.html
Dies sollte eine Kopie des Originals seinbase_site.html
, außer dass Sie Ihren benutzerdefinierten Titel eingeben:
{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}
Damit dies funktioniert, müssen Sie die richtigen Einstellungen für Ihr Projekt haben, nämlich in settings.py
:
/projectdir/templates/
hinzugefügt wird TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
hinzugefügt wird TEMPLATE_LOADERS
.Weitere Informationen finden Sie in den Dokumentensettings.py
.
{% extends "admin/base.html" %}
in /<projectdir>/templates/admin/base_site.html
und einfach neu definieren den Block (n) benötigen Sie, das heißt {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
Einstellung nicht hinzufügen . Nur TEMPLATE_DIR
ist genug, wie es scheint
Ab Django 1.7 müssen Sie keine Vorlagen mehr überschreiben. Sie können nun implementieren site_header , site_title
und index_title
Attribute auf einem benutzerdefinierten Adminsite , um auf einfache Weise ändern Sie die Admin - Website Seitentitel und Kopftext. Erstellen Sie eine AdminSite-Unterklasse und binden Sie Ihre Instanz in Ihre URLconf ein:
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)),
)
Update : Wie von oxfn hervorgehoben, können Sie das einfach site_header
in Ihrem urls.py
oder admin.py
direkt ohne Unterklasse einstellen AdminSite
:
admin.site.site_header = 'My administration'
admin_site
dem von Ihnen erstellten neuen registrieren . Gefällt admin_site.register(MyModel, ModelAdmin)
admin/base_site.html
Vorlage ab, z. B. password_reset), extra_context
sollte er auch in URLs verwendet werden: zBurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
admin.site.site_header
Konfiguration app*/admin.py
würde dann wirksam?
Es gibt eine einfache Möglichkeit, Set Admin-Interface - Header - weisen Sie die aktuelle Server - Betreiber Instanz in urls.py
wie diese
admin.site.site_header = 'My admin'
Oder man kann etwas Magie zum Erstellen von Headern in einer separaten Methode implementieren
admin.site.site_header = get_admin_header()
In einfachen Fällen ist daher keine Unterklasse erforderlich AdminSite
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
und eine Weile versucht, es zum Laufen zu bringen, autodiscover()
aber schließlich selbst über diese Lösung nachgedacht. Ich habe tatsächlich meinen Override in admin.py
, was ich für sauberer halte, da er zusammen mit all der anderen
In können urls.py
Sie die 3 wichtigsten Variablen überschreiben:
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"
Referenz: Django-Dokumentation zu diesen Attributen .
Eine einfache Komplettlösung in Django 1.8.3 basierend auf den Antworten in dieser Frage.
In settings.py
add:
ADMIN_SITE_HEADER = "My shiny new administration"
In urls.py
add:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.py
. Wenn Sie es noch nicht haben, erstellen Sie es einfach und vergessen Sie nicht, es hinzuzufügen from django.contrib import admin
.
ADMIN_SITE_HEADER
Das einzige, was hier zählt, ist die Zeile inurls.py
Der einfachste Weg, dies zu tun, stellen Sie sicher, dass Sie haben
from django.contrib import admin
und fügen Sie diese dann einfach unten url.py
in Ihrer Hauptanwendung hinzu
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
Fügen Sie für Django 2.1.1 die folgenden Zeilen hinzu 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'
Wie Sie in den Vorlagen sehen können , wird der Text über das Lokalisierungsframework bereitgestellt (beachten Sie die Verwendung des trans
Vorlagen-Tags). Sie können Änderungen an den Übersetzungsdateien vornehmen, um den Text zu überschreiben, ohne eine eigene Kopie der Vorlagen zu erstellen.
mkdir locale
./manage.py makemessages
Bearbeiten locale/en/LC_MESSAGES/django.po
und diese Zeilen hinzufügen:
msgid "Django site admin"
msgstr "MySite site admin"
msgid "Django administration"
msgstr "MySite administration"
./manage.py compilemessages
Siehe https://docs.djangoproject.com/de/1.3/topics/i18n/localization/#message-files
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
Vergessen Sie nicht, diese Zeile hinzuzufügen.
Zunächst sollten Sie Ihrem Projekt templates / admin / base_site.html hinzufügen. Diese Datei kann sicher überschrieben werden, da es sich um eine Datei handelt, die die Django-Entwickler genau zum Zweck der Anpassung Ihrer Admin-Site vorgesehen haben. Hier ist ein Beispiel dafür, was in die Datei eingefügt werden soll:
{% 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 %}
Dies ist gängige Praxis. Danach bemerkte ich jedoch, dass ich immer noch eine nervige „Site Administration“ auf der Hauptindexseite des Administrators hatte. Und diese Zeichenfolge befand sich nicht in einer der Vorlagen, sondern in der Administratoransicht. Zum Glück ist es ziemlich einfach zu ändern. Angenommen, Ihre Sprache ist auf Englisch eingestellt, führen Sie die folgenden Befehle in Ihrem Projektverzeichnis aus:
$ mkdir locale
$ ./manage.py makemessages -l en
Öffnen Sie nun die Datei locale / de / LC_MESSAGES / django.po und fügen Sie zwei Zeilen nach den Header-Informationen hinzu (die letzten beiden Zeilen dieses Beispiels).
"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"
Denken Sie danach daran, den folgenden Befehl auszuführen und den Server Ihres Projekts neu zu laden:
$ ./manage.py compilemessages
Quelle: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/
Ab Django 2.0 können Sie einfach eine einzelne Zeile hinzufügen url.py
und den Namen ändern.
# url.py
from django.contrib import admin
admin.site.site_header = "My Admin Central" # Add this
Für ältere Versionen von Django. (<1.11 und früher) müssen Sie bearbeitenadmin/base_site.html
Ändern Sie diese Zeile
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
zu
{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}
Sie können Ihre django
Version überprüfen durch
django-admin --version
Gehen Sie einfach zur Datei admin.py und fügen Sie diese Zeile in die Datei ein:
admin.site.site_header = "My Administration"
Sie müssen für diese Arbeit keine Vorlage ändern, sondern nur die settings.py
Ihres Projekts aktualisieren . Gehen Sie zum Ende von settings.py
und definieren Sie dies.
admin.site.site_header = 'My Site Admin'
Auf diese Weise können Sie den Header des Django-Administrators ändern. Darüber hinaus können Sie unter dem folgenden Link mehr über die Anpassung und Einstellungen von Django Admin lesen.
Sie können AdminSite.site_header
diesen Text ändern. Hier ist die Dokumentation
Hierfür gibt es zwei Methoden:
1] Durch Überschreiben base_site.html
in django/contrib/admin/templates/admin/base_site.html
: Folgendes ist der Inhalt von 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 %}
Bearbeiten Sie den site_title & site_header im obigen Code-Snippet. Diese Methode funktioniert, ist jedoch nicht empfehlenswert, da es sich um eine statische Änderung handelt.
2] Durch Hinzufügen der folgenden Zeilen im urls.py
Projektverzeichnis:
admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"
Diese Methode wird empfohlen, da wir den Site-Header, den Site-Titel und den Index-Titel ohne Bearbeitung ändern können base_site.html
.
Sie überschreiben einfach die admin/base_site.html
Vorlage (kopieren Sie die Vorlage aus django.contrib.admin.templates
und fügen Sie sie in Ihr eigenes Admin-Vorlagenverzeichnis ein) und ersetzen den branding
Block.