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".
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".
Réponses:
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.html
modè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
:
/projectdir/templates/
est ajouté dans TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
est ajouté dans TEMPLATE_LOADERS
.Voir les documents pour plus d'informations sursettings.py
.
{% extends "admin/base.html" %}
dans /<projectdir>/templates/admin/base_site.html
et redéfinir simplement le bloc (s) dont vous avez besoin, par exemple {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
paramètre. Il TEMPLATE_DIR
suffit, semble
Depuis Django 1.7, vous n'avez pas besoin de remplacer les modèles. Vous pouvez désormais implémenter site_header , site_title
et des index_title
attributs 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_header
dans votre urls.py
ou admin.py
directement sans sous- classement AdminSite
:
admin.site.site_header = 'My administration'
admin_site
que vous avez créé. Commeadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
modèle, par exemple password_reset), il extra_context
doit é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"}})
admin.site.site_header
quelle configuration app*/admin.py
prendrait effet?
Il existe un moyen facile de définir l'en-tête du site d'administration - affectez-le à l'instance d'administration actuelle urls.py
comme 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
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
passé 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
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 .
Une solution complète simple dans Django 1.8.3 basée sur les réponses à cette question.
En settings.py
plus:
ADMIN_SITE_HEADER = "My shiny new administration"
En urls.py
plus:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
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
.
ADMIN_SITE_HEADER
, la seule chose qui compte ici est la ligneurls.py
La façon la plus simple de le faire est de s'assurer
from django.contrib import admin
puis ajoutez-les au bas url.py
de votre application principale
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
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'
Comme vous pouvez le voir dans les modèles , le texte est fourni via le framework de localisation (notez l'utilisation de la trans
balise 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.
mkdir locale
./manage.py makemessages
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"
./manage.py compilemessages
Voir https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
Accédez simplement au fichier admin.py et ajoutez cette ligne dans le fichier:
admin.site.site_header = "My Administration"
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
N'oubliez pas d'ajouter cette ligne.
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/
Depuis Django 2.0, vous pouvez simplement ajouter une seule ligne dans le url.py
et 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 django
version en
django-admin --version
vous n'avez pas besoin de changer de modèle pour ce travail, il vous suffit de mettre à jour le settings.py
de votre projet. Allez au bas de la settings.py
et 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.
Il existe deux méthodes pour ce faire:
1] En redéfinissant base_site.html
dans 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.py
le 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
.
Vous venez de remplacer le admin/base_site.html
modèle (copiez le modèle à partir de django.contrib.admin.templates
et placez dans votre propre répertoire de modèle d'administration) et remplacez le branding
bloc.