242 votes

Django Admin - modification du texte de l'en-tête "Administration de Django".

Comment modifier le texte "Django administration" dans l'en-tête de l'administration django ?

Cela ne semble pas être couvert dans la documentation "Personnaliser l'administration".

0 votes

Ce sujet est traité dans le tutoriel .

0 votes

La meilleure réponse est en dessous de

389voto

Reto Aebersold Points 6144

Depuis Django 1.7, vous n'avez plus besoin de remplacer les modèles. Vous pouvez maintenant implémenter en-tête du site , site_title y index_title d'un attribut personnalisé AdminSite afin de modifier facilement le titre de la page et le texte de l'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 fait remarquer oxfn, vous pouvez simplement définir l'option site_header en su urls.py o admin.py directement sans sous-classer AdminSite :

admin.site.site_header = 'My administration'

12 votes

Un message d'erreur "Vous n'avez pas le droit de modifier quoi que ce soit" s'affiche lorsque j'essaie d'accéder au répertoire /myadmin/. Il semble que je doive appeler .autodiscover, mais Django 1.7 est censé l'appeler automatiquement. Un indice ?

6 votes

@DavidArcos Vous devez enregistrer vos modèles sur le nouveau site de la Commission européenne. admin_site que vous avez créé. Comme admin_site.register(MyModel, ModelAdmin)

1 votes

Si un en-tête dans django.auth.views doit également être personnalisé (cela dépend de l'option admin/base_site.html (par exemple, password_reset), il faut alors aussi extra_context doit être utilisé dans les urls : par exemple url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})

226voto

oxfn Points 1014

Il existe un moyen simple de définir l'en-tête du site d'administration - l'attribuer à l'instance d'administration actuelle dans urls.py comme ceci

admin.site.site_header = 'My admin'

Ou bien on peut mettre en œuvre une certaine 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'y a pas besoin de sous-classer AdminSite

0 votes

Je l'ai ajouté dans mon url.py juste après urlpattern. Mais cela ne fonctionne pas lorsque j'exécute le site avec nginx.

0 votes

@AlexJolig nginx ne devrait pas être un problème. Quel backenf que vous utilisez ? L'avez-vous redémarré ?

1 votes

La première méthode a fonctionné. Je ne sais pas vraiment quel est le problème pour l'instant.

143voto

user608133 Points 899

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


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

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

Il doit s'agir d'une copie du original base_site.html sauf pour mettre votre titre personnalisé :

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

Pour que cela fonctionne, vous devez avoir les 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.Loader est ajouté dans TEMPLATE_LOADERS .

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

79 votes

Notez également que vous pouvez {% extends "admin/base.html" %} en /<projectdir>/templates/admin/base_site.html et redéfinissez simplement le(s) bloc(s) dont vous avez besoin, par ex. {% block branding %}...{% endblock %} .

12 votes

Même si elle est assez ancienne, je tiens à ajouter que vous devez placer votre application où vous définissez ce modèle avant 'django.contrib.admin', dans INSTALLED_APPS.

0 votes

Arnaud, c'est la réponse la plus propre.

10voto

Matthew Points 132

Comme vous pouvez le voir dans le modèles le texte est livré par le biais du cadre de localisation (notez l'utilisation de la balise trans ). Vous pouvez apporter des modifications aux fichiers de traduction pour remplacer le texte sans faire votre propre copie des modèles.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Modifier 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

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

3 votes

C'est une solution terrible. Remplacer les chaînes de traduction est tout simplement une idée terrible.

6voto

Soroosh Points 34

Tout d'abord, vous devez ajouter templates/admin/base_site.html à votre projet. Ce fichier peut être écrasé en toute sécurité puisqu'il s'agit d'un fichier que les développeurs de Django ont prévu dans le but précis de personnaliser un peu votre site d'administration. Voici un exemple de ce qu'il faut mettre dans ce 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 que je me retrouvais toujours avec un ennuyeux "Administration du site" sur la page d'index de l'administration principale. Et cette chaîne ne se trouvait dans aucun des modèles, mais plutôt dans la vue d'administration. Heureusement, c'est assez facile à changer. En supposant que votre langue est l'anglais, exécutez les commandes suivantes depuis le répertoire de votre 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/

0 votes

La création de liens vers des sites extérieurs est considérée comme une mauvaise chose, car le lien peut se détériorer. Vous êtes encouragé à réécrire la réponse du site ici.

0 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X