Django Admin - changer l'en-tête 'Django administration' text


203

Comment peut-on changer le texte «Administration Django» dans l'en-tête admin django?

Il ne semble pas être couvert dans la documentation "Personnalisation de l'administrateur".


Ceci est couvert dans le tutoriel .
djvg

Réponses:


139

Mise à jour : si vous utilisez Django 1.7+, voyez la réponse ci-dessous .


Réponse originale de 2011: vous devez créer votre propre base_site.htmlmodèle d' administration pour ce faire. La façon la plus simple est de créer le fichier:

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

Cela devrait être une copie de l' originalbase_site.html , sauf en mettant votre titre personnalisé:

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

Pour que cela fonctionne, vous devez disposer des paramètres corrects pour votre projet, à savoir dans settings.py:

  • Assurez-vous que /projectdir/templates/est ajouté dans TEMPLATE_DIRS.
  • Assurez-vous que django.template.loaders.filesystem.Loaderest ajouté dans TEMPLATE_LOADERS.

Voir les documents pour plus d'informations sursettings.py .


77
Notez également que vous pouvez {% extends "admin/base.html" %}dans /<projectdir>/templates/admin/base_site.htmlet redéfinir simplement le bloc (s) dont vous avez besoin, par exemple {% block branding %}...{% endblock %}.
Arnaud

12
même s'il est assez ancien, je veux ajouter que vous devez placer votre application là où vous définissez ce modèle avant 'django.contrib.admin', dans INSTALLED_APPS
DRC

1
Dans django 1.6 python 3.3, ce qui précède fonctionne même lorsque vous n'ajoutez pas le TEMPLATE_LOADERparamètre. Il TEMPLATE_DIRsuffit, semble
lukik

12
Ceci est obsolète au 1.7. Voir la réponse de Reto Aebersold.
Andrew B.

5
Essayez ceci dans url.py admin.site.site_header = 'Mon administration' admin.site.index_title = ('Mon administrateur') admin.site.site_title = ('Ma page d'administration')
Ashish Gupta

352

Depuis Django 1.7, vous n'avez pas besoin de remplacer les modèles. Vous pouvez désormais implémenter site_header , site_titleet des index_titleattributs sur un AdminSite personnalisé afin de modifier facilement le titre de la page et le texte d'en-tête du site d'administration. Créez une sous-classe AdminSite et connectez votre instance à votre 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)),
)

Mise à jour : Comme l'a souligné oxfn, vous pouvez simplement définir le site_headerdans votre urls.pyou admin.pydirectement sans sous- classement AdminSite:

admin.site.site_header = 'My administration'

11
Cela génère un message d'erreur «Vous n'avez pas l'autorisation de modifier quoi que ce soit» lorsque j'essaie d'accéder au / myadmin /. On dirait que je devrais appeler .autodiscover, mais Django 1.7 est censé être appelé automatiquement. Un indice?
David Arcos

3
@DavidArcos Vous devez enregistrer vos modèles à nouveau admin_siteque vous avez créé. Commeadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
Si un en-tête dans django.auth.views doit également être personnalisé (cela dépend du admin/base_site.htmlmodèle, par exemple password_reset), il extra_contextdoit également être utilisé dans les URL: par exempleurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

Une chose à savoir sur cette façon est qu'elle ne fonctionnera qu'avec les pages d'administration standard, si de votre côté sur une autre application vous ajoutez vos propres pages d'administration (étendez le modèle de base d'administration), elles prendront toujours la "Administration Django" par défaut Titre.
Kedare

1
@oxfn Si j'ai plusieurs applications, admin.site.site_headerquelle configuration app*/admin.pyprendrait effet?
nalzok

196

Il existe un moyen facile de définir l'en-tête du site d'administration - affectez-le à l'instance d'administration actuelle urls.pycomme ceci

admin.site.site_header = 'My admin'

Ou on peut implémenter une magie de création d'en-tête dans une méthode distincte

admin.site.site_header = get_admin_header()

Ainsi, dans les cas simples, il n'est pas nécessaire de sous-classer AdminSite


1
La première façon a fonctionné. Je ne sais pas vraiment quel était le problème en ce moment. merci
Alex Jolig

4
Si vous modifiez l' en- tête, vous voudrez probablement aussi changer le titre du site, ce qui peut être accompli avec: admin.site.site_title = 'My site admin'.
mcastle

1
Voici une chaîne d'importation à ajouter urls.py:from django.contrib import admin
serg

4
Je souhaite avoir trouvé cela en premier ... En tenant compte des documents, j'ai sous-classé et j'ai AdminSitepassé un certain temps à essayer de le faire fonctionner, autodiscover()mais j'ai finalement pensé à cette solution par moi-même. J'ai en fait mon remplacement admin.py, qui je pense est plus propre car il est conservé avec toutes les autres logiques liées à l'administration
user193130

1
consultez la liste de tous les attributs que vous pouvez modifier sur docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

Dans, urls.pyvous pouvez remplacer les 3 variables les plus importantes:

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"

Référence: documentation Django sur ces attributs .


65

Une solution complète simple dans Django 1.8.3 basée sur les réponses à cette question.

En settings.pyplus:

ADMIN_SITE_HEADER = "My shiny new administration"

En urls.pyplus:

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

7
Y a-t-il un meilleur endroit pour le faire que d'utiliser urls.py?
Venkat Kotra

2
@VenkatKotra Oui, en admin.py. Si vous ne l'avez pas déjà, créez-le et n'oubliez pas de l'ajouter from django.contrib import admin.
user193130

3
La façon recommandée d'importer les paramètres est via - "depuis les paramètres d'importation de django.conf" (voir docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi

1
Il n'y a aucun paramètre que Django regarde appelé ADMIN_SITE_HEADER, la seule chose qui compte ici est la ligneurls.py
Flimm

16

La façon la plus simple de le faire est de s'assurer

from django.contrib import admin

puis ajoutez-les au bas url.pyde votre application principale

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

15

Pour Django 2.1.1, ajoutez les lignes suivantes à 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

Comme vous pouvez le voir dans les modèles , le texte est fourni via le framework de localisation (notez l'utilisation de la transbalise de modèle). Vous pouvez apporter des modifications aux fichiers de traduction pour remplacer le texte sans créer votre propre copie des modèles.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Modifiez locale/en/LC_MESSAGES/django.po, en ajoutant ces lignes:

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

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


1
C'est une terrible solution. Remplacer les chaînes de traduction n'est qu'une idée horrible.

6

Accédez simplement au fichier admin.py et ajoutez cette ligne dans le fichier:

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 N'oubliez pas d'ajouter cette ligne.
rkdevs

5

Tout d'abord, vous devez ajouter des modèles / admin / base_site.html à votre projet. Ce fichier peut être écrasé en toute sécurité car c'est un fichier que les développeurs Django ont prévu dans le but exact de personnaliser un peu votre site d'administration. Voici un exemple de ce qu'il faut mettre dans le fichier:

{% 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 %}

C'est une pratique courante. Mais j'ai remarqué après cela qu'il me restait encore une ennuyeuse «Administration du site» sur la page d'index d'administration principale. Et cette chaîne n'était dans aucun des modèles, mais plutôt définie dans la vue d'administration. Heureusement, il est assez facile de changer. En supposant que votre langue est définie sur l'anglais, exécutez les commandes suivantes à partir de votre répertoire de projet:

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

Ouvrez maintenant le fichier locale / en / LC_MESSAGES / django.po et ajoutez deux lignes après les informations d'en-tête (les deux dernières lignes de cet exemple)

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

Après cela, n'oubliez pas d'exécuter la commande suivante et de recharger le serveur de votre projet:

$ ./manage.py compilemessages

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


Les liens vers des sites externes sont considérés comme mauvais, car le lien peut mal tourner. Vous êtes encouragés à réécrire la réponse du site ici.

J'ai réécrit la réponse au cas où vous ne voudriez pas sortir du site.
Soroosh

5

Depuis Django 2.0, vous pouvez simplement ajouter une seule ligne dans le url.pyet changer le nom.

# url.py

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

Pour les anciennes versions de Django. (<1.11 et versions antérieures), vous devez modifieradmin/base_site.html

Changer cette ligne

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

à

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

Vous pouvez vérifier votre djangoversion en

django-admin --version

3

vous n'avez pas besoin de changer de modèle pour ce travail, il vous suffit de mettre à jour le settings.pyde votre projet. Allez au bas de la settings.pyet définissez ceci.

admin.site.site_header = 'My Site Admin'

De cette façon, vous pourrez changer l'en-tête de l'administrateur de Django. De plus, vous pouvez en savoir plus sur la personnalisation et les paramètres de Django Admin sur le lien suivant.

Documentation d'administration Django



3

Il existe deux méthodes pour ce faire:

1] En redéfinissant base_site.htmldans django/contrib/admin/templates/admin/base_site.html: Ce qui suit est le contenu 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 %}

Modifiez le site_title & site_header dans l'extrait de code ci-dessus. Cette méthode fonctionne mais elle n'est pas recommandée car c'est un changement statique.

2] En ajoutant les lignes suivantes dans urls.pyle répertoire du projet:

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

Cette méthode est recommandée car nous pouvons changer l'en-tête du site, le titre du site et le titre de l'index sans modification base_site.html.


2

Étant donné que j'utilise uniquement l'interface d'administration dans mon application, je mets cela dans le fichier admin.py:

admin.site.site_header = 'My administration'

1

Vous venez de remplacer le admin/base_site.htmlmodèle (copiez le modèle à partir de django.contrib.admin.templateset placez dans votre propre répertoire de modèle d'administration) et remplacez le brandingbloc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.