web-dev-qa-db-fra.com

Django Admin - change l'en-tête 'Administration de Django'

Comment modifier le texte 'Administration Django' dans l'en-tête Django admin?

Cela ne semble pas être couvert dans la documentation "Personnalisation de l'admin".

183
samurailawngnome

Mise à jour : Si vous utilisez Django 1.7+, consultez le réponse ci-dessous .


Réponse originale de 2011: Vous devez créer votre propre modèle admin base_site.html pour le faire. Le plus simple est de créer le fichier:

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

Cela devrait être une copie du original base_site.html , sauf que vous insérerez dans 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é à TEMPLATE_DIRS.
  • Assurez-vous que Django.template.loaders.filesystem.Loader est ajouté à TEMPLATE_LOADERS.

Voir la documentation pour plus d'informations sur settings.py .

133
user608133

À partir de Django 1.7, vous n'avez pas besoin de remplacer les modèles. Vous pouvez maintenant implémenter site_header , site_title , et index_title attributs sur une personnalisation AdminSite = afin de changer facilement le titre de la page et le texte de l'en-tête du site admin. 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_header dans votre _urls.py_ ou _admin.py_ directement sans sous-classement AdminSite:

_admin.site.site_header = 'My administration'
_
333
Reto Aebersold

Il existe un moyen simple de définir l’en-tête du site d’admin: attribuez-le à l’instance d’administrateur actuelle dans urls.py comme ceci.

admin.site.site_header = 'My admin'

Ou on peut implémenter une magie de construction d'en-tête dans une méthode séparée

admin.site.site_header = get_admin_header()

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

179
oxfn

Dans urls.py, vous 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 .

74
Gregory

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

Dans settings.py ajoutez:

ADMIN_SITE_HEADER = "My shiny new administration"

Dans urls.py ajoutez:

from Django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
61
kuzavas

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

from Django.contrib import admin

puis ajoutez-les simplement au bas de url.py de votre application principale

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

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'
11
Ganesh

Comme vous pouvez le voir dans modèles , le texte est transmis via le cadre de localisation (notez l'utilisation de la balise de modèle trans.). Vous pouvez modifier les fichiers de traduction pour remplacer le texte sans créer votre propre copie des modèles.

  1. mkdir locale
  2. ./manage.py makemessages
  3. Éditez 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/fr/1.3/topics/i18n/localization/#message-files

9
Wedgwood

Tout d’abord, vous devez ajouter templates/admin/base_site.html à votre projet. Ce fichier peut être remplacé en toute sécurité car il s’agit d’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é par la suite qu'il me restait encore un "Administration du site" ennuyeux sur la page d'index principal de l'administrateur. Et cette chaîne ne figurait dans aucun des modèles, mais dans la vue administrateur. Heureusement, il est assez facile de changer. En supposant que votre langue soit définie en anglais, exécutez les commandes suivantes à partir du répertoire de votre projet:

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

Ouvrez maintenant le fichier de paramètres régionaux/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 <[email protected]>\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"

Ensuite, rappelez-vous 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/

4
Soroosh

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')
4
Fakher Meddeb

Vous pouvez utiliser AdminSite.site_header pour modifier ce texte. Voici le docs

2
YasinYA

vous n'avez pas besoin de changer de modèle pour ce travail, vous avez juste besoin de mettre à jour le settings.py de votre projet. Allez au bas du settings.py et définissez-le.

admin.site.site_header = 'My Site Admin'

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

Documentation Django Admin

2
Chitrank Dixit

Comme je n'utilise que l'interface d'administration dans mon application, j'ai mis ceci dans le fichier admin.py:

admin.site.site_header = 'My administration'
1
numahell

Vous venez de remplacer le modèle admin/base_site.html (copiez le modèle de Django.contrib.admin.templates et placez votre propre répertoire de modèle d’administrateur) et remplacez le bloc branding.

0