Django Admin - Ändern Sie den Header-Text 'Django Administration'


Antworten:


139

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:

  • Stellen Sie sicher, dass /projectdir/templates/hinzugefügt wird TEMPLATE_DIRS.
  • Stellen Sie sicher, dass django.template.loaders.filesystem.Loaderhinzugefügt wird TEMPLATE_LOADERS.

Weitere Informationen finden Sie in den Dokumentensettings.py .


77
Beachten Sie auch , dass Sie {% extends "admin/base.html" %}in /<projectdir>/templates/admin/base_site.htmlund einfach neu definieren den Block (n) benötigen Sie, das heißt {% block branding %}...{% endblock %}.
Arnaud

12
Auch wenn es noch ziemlich alt ist, möchte ich hinzufügen, dass Sie Ihre App dort, wo Sie diese Vorlage definieren, vor 'django.contrib.admin' in INSTALLED_APPS
DRC

1
In Django 1.6 Python 3.3 funktioniert das oben genannte auch dann, wenn Sie die TEMPLATE_LOADEREinstellung nicht hinzufügen . Nur TEMPLATE_DIRist genug, wie es scheint
lukik

12
Dies ist ab 1.7 veraltet. Siehe die Antwort von Reto Aebersold.
Andrew B.

5
Versuchen Sie dies in url.py admin.site.site_header = 'Meine Administration' admin.site.index_title = ('Mein Admin') admin.site.site_title = ('Meine Admin-Seite')
Ashish Gupta

352

Ab Django 1.7 müssen Sie keine Vorlagen mehr überschreiben. Sie können nun implementieren site_header , site_titleund index_titleAttribute 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_headerin Ihrem urls.pyoder admin.pydirekt ohne Unterklasse einstellen AdminSite:

admin.site.site_header = 'My administration'

11
Dies führt zu der Fehlermeldung "Sie haben keine Berechtigung, etwas zu bearbeiten", wenn ich versuche, auf / myadmin / zuzugreifen. Sieht so aus, als sollte ich .autodiscover aufrufen, aber Django 1.7 soll automatisch aufgerufen werden. Irgendeine Ahnung?
David Arcos

3
@DavidArcos Sie müssen Ihre Modelle bei admin_sitedem von Ihnen erstellten neuen registrieren . Gefällt admin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
Wenn auch ein Header in django.auth.views angepasst werden soll (das hängt von der admin/base_site.htmlVorlage ab, z. B. password_reset), extra_contextsollte 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"}})
hynekcer

Auf diese Weise sollten Sie wissen, dass dies nur mit den Standard-Administrationsseiten funktioniert. Wenn Sie auf Ihrer Seite in einer anderen Anwendung Ihre eigenen Administrationsseiten hinzufügen (erweitern Sie die Admin-Basisvorlage), wird immer die Standard-Django-Administration verwendet. Titel.
Kedare

1
@oxfn Wenn ich mehr als eine App habe, welche admin.site.site_headerKonfiguration app*/admin.pywürde dann wirksam?
Nalzok

196

Es gibt eine einfache Möglichkeit, Set Admin-Interface - Header - weisen Sie die aktuelle Server - Betreiber Instanz in urls.pywie 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


1
Der erste Weg hat funktioniert. Ich weiß nicht wirklich, was das Problem im Moment war. Vielen Dank
Alex Jolig

4
Wenn Sie den Header ändern, möchten Sie wahrscheinlich auch den Site-Titel ändern. Dies kann erreicht werden mit : admin.site.site_title = 'My site admin'.
Newcastle

1
Hier ist eine Importzeichenfolge, die hinzugefügt werden kann urls.py:from django.contrib import admin
Serg

4
Ich wünschte, ich hätte das zuerst gefunden ... Ich habe die Dokumente beachtet, eine Unterklasse erstellt AdminSiteund 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
adminbezogenen

1
Überprüfen Sie die Liste aller Attribute, die Sie ändern können, unter docs.djangoproject.com/de/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

In können urls.pySie 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 .


65

Eine einfache Komplettlösung in Django 1.8.3 basierend auf den Antworten in dieser Frage.

In settings.pyadd:

ADMIN_SITE_HEADER = "My shiny new administration"

In urls.pyadd:

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

7
Gibt es einen besseren Ort, um dies zu tun, als urls.py zu verwenden?
Venkat Kotra

2
@ VenkatKotra Ja, in admin.py. Wenn Sie es noch nicht haben, erstellen Sie es einfach und vergessen Sie nicht, es hinzuzufügen from django.contrib import admin.
user193130

3
Der empfohlene Weg zum Importieren von Einstellungen ist über - "aus den Importeinstellungen von django.conf" (siehe docs.djangoproject.com/de/1.9/topics/settings/… )
yoniLavi

1
Es gibt keine Einstellung, die Django als aufgerufen ansieht. ADMIN_SITE_HEADERDas einzige, was hier zählt, ist die Zeile inurls.py
Flimm

16

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.pyin Ihrer Hauptanwendung hinzu

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

15

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'

10

Wie Sie in den Vorlagen sehen können , wird der Text über das Lokalisierungsframework bereitgestellt (beachten Sie die Verwendung des transVorlagen-Tags). Sie können Änderungen an den Übersetzungsdateien vornehmen, um den Text zu überschreiben, ohne eine eigene Kopie der Vorlagen zu erstellen.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Bearbeiten locale/en/LC_MESSAGES/django.pound diese Zeilen hinzufügen:

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

Siehe https://docs.djangoproject.com/de/1.3/topics/i18n/localization/#message-files


1
Dies ist eine schreckliche Lösung. Das Überschreiben von Übersetzungszeichenfolgen ist nur eine schreckliche Idee.

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 Vergessen Sie nicht, diese Zeile hinzuzufügen.
rkdevs

5

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/


Das Verknüpfen mit externen Websites wird als schlecht angesehen, da der Link möglicherweise fehlerhaft ist. Sie werden aufgefordert, die Antwort von der Website hier neu zu schreiben.

Ich habe die Antwort umgeschrieben, falls Sie nicht außerhalb der Website gehen möchten.
Soroosh

5

Ab Django 2.0 können Sie einfach eine einzelne Zeile hinzufügen url.pyund 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 djangoVersion überprüfen durch

django-admin --version

5

Gehen Sie einfach zur Datei admin.py und fügen Sie diese Zeile in die Datei ein:

admin.site.site_header = "My Administration"


3

Sie müssen für diese Arbeit keine Vorlage ändern, sondern nur die settings.pyIhres Projekts aktualisieren . Gehen Sie zum Ende von settings.pyund 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.

Django Admin-Dokumentation



3

Hierfür gibt es zwei Methoden:

1] Durch Überschreiben base_site.htmlin 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.pyProjektverzeichnis:

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.


2

Da ich in meiner App nur die Admin-Oberfläche verwende, füge ich dies in die admin.py ein:

admin.site.site_header = 'My administration'

1

Sie überschreiben einfach die admin/base_site.htmlVorlage (kopieren Sie die Vorlage aus django.contrib.admin.templatesund fügen Sie sie in Ihr eigenes Admin-Vorlagenverzeichnis ein) und ersetzen den brandingBlock.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.