Administrador de Django: cambie el texto del encabezado 'Administración de Django'


202

¿Cómo se cambia el texto de 'Administración de Django' en el encabezado de administración de django?

No parece estar cubierto en la documentación "Personalización del administrador".


Esto está cubierto en el tutorial .
djvg

Respuestas:


139

Actualización : si está utilizando Django 1.7+, consulte la respuesta a continuación .


Respuesta original de 2011: debe crear su propia base_site.htmlplantilla de administrador para hacer esto. La forma más fácil es crear el archivo:

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

Debe ser una copia del originalbase_site.html , excepto poner su título personalizado:

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

Para que esto funcione, debe tener la configuración correcta para su proyecto, es decir, en settings.py:

  • Asegúrate de /projectdir/templates/agregarlo a TEMPLATE_DIRS.
  • Asegúrate de django.template.loaders.filesystem.Loaderagregarlo a TEMPLATE_LOADERS.

Consulte los documentos para obtener más información sobresettings.py .


77
También tenga en cuenta que puede {% extends "admin/base.html" %}ingresar /<projectdir>/templates/admin/base_site.html, y simplemente redefinir los bloques que necesita, es decir {% block branding %}...{% endblock %}.
Arnaud

12
incluso si es bastante viejo, quiero agregar que debe poner su aplicación donde defina esta plantilla antes de 'django.contrib.admin', en INSTALLED_APPS
DRC

1
En django 1.6 python 3.3, lo anterior funciona incluso cuando no agrega la TEMPLATE_LOADERconfiguración. Sólo TEMPLATE_DIRse parece lo suficiente
lukik

12
Esto está desactualizado a partir de 1.7. Ver la respuesta de Reto Aebersold.
Andrew B.

55
Pruebe esto en url.py admin.site.site_header = 'My Administration' admin.site.index_title = ('My Admin') admin.site.site_title = ('My Admin page')
Ashish Gupta

352

A partir de Django 1.7 no necesita anular plantillas. Ahora puede aplicar site_header , site_titley index_titlelos atributos de una costumbre AdminSite para cambiar fácilmente el título de la página del sitio de administración y el texto del encabezado. Cree una subclase de AdminSite y conecte su instancia a su 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)),
)

Actualización : como señala oxfn, simplemente puede configurarlo site_headeren su urls.pyo admin.pydirectamente sin subclasificar AdminSite:

admin.site.site_header = 'My administration'

11
Esto arroja un mensaje de error "No tiene permiso para editar nada" cuando intento acceder a / myadmin /. Parece que debería llamar a .autodiscover, pero se supone que Django 1.7 se llama automáticamente. ¿Cualquier pista?
David Arcos

3
@DavidArcos Debe registrar sus modelos en los nuevos admin_siteque creó. Me gustaadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
Si también se debe personalizar un encabezado en django.auth.views (que depende de la admin/base_site.htmlplantilla, por ejemplo, password_reset), también se extra_contextdebe usar en las URL: por ejemplourl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

Algo que debe saber de esta manera es que solo funcionará con las páginas de administración estándar, si de su lado en otra aplicación está agregando sus propias páginas de administración (extendind la plantilla de base de administración), siempre tomarán la "Administración de Django" predeterminada título.
Kedare

1
@oxfn Si tengo más de una aplicación, ¿ admin.site.site_headeren qué configuración app*/admin.pyentraría en vigor?
nalzok

196

Hay una manera fácil de configurar el encabezado del sitio de administración: asígnelo a la instancia de administrador actual de urls.pyesta manera

admin.site.site_header = 'My admin'

O uno puede implementar algo de magia de construcción de encabezados en un método separado

admin.site.site_header = get_admin_header()

Por lo tanto, en casos simples no hay necesidad de subclase AdminSite


1
La primera forma funcionó. Realmente no sé cuál era el problema en este momento. gracias
Alex Jolig

44
Si va a modificar la cabecera, es probable que también quiere cambiar el título del sitio, que se puede lograr con: admin.site.site_title = 'My site admin'.
mcastle

1
Aquí hay una cadena de importación para agregar a urls.py:from django.contrib import admin
serg

44
Ojalá encontrara esto primero ... Prestando atención a los documentos, subclasifiqué AdminSitey pasé un tiempo tratando de hacerlo funcionar, autodiscover()pero finalmente pensé en esta solución por mi cuenta. De hecho, tengo mi anulación admin.py, que creo que es más limpia, ya que se mantiene junto con todas las demás lógicas relacionadas con el administrador
usuario193130

1
consulte la lista de todos los atributos que puede cambiar en docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

En urls.pypuede anular las 3 variables más 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"

Referencia: documentación de Django sobre estos atributos .


65

Una solución completa simple en Django 1.8.3 basada en las respuestas de esta pregunta.

En settings.pyagregar:

ADMIN_SITE_HEADER = "My shiny new administration"

En urls.pyagregar:

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

77
¿Hay un lugar mejor para hacer esto que usar urls.py?
Venkat Kotra

2
@VenkatKotra Sí, en admin.py. Si aún no lo tiene, simplemente créelo y no olvide agregarlo from django.contrib import admin.
user193130

3
La forma recomendada de importar la configuración es a través de "desde la configuración de importación de django.conf" (ver docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi

1
No hay una configuración que Django considere llamada ADMIN_SITE_HEADER, lo único que importa aquí es la líneaurls.py
Flimm

16

La forma más fácil de hacerlo es asegurarte de que tienes

from django.contrib import admin

y luego solo agregue estos en la parte inferior url.pyde su aplicación principal

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

15

Para Django 2.1.1 agregue las siguientes líneas a 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

Como puede ver en las plantillas , el texto se entrega a través del marco de localización (tenga en cuenta el uso de la transetiqueta de la plantilla). Puede realizar cambios en los archivos de traducción para anular el texto sin hacer su propia copia de las plantillas.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Editar locale/en/LC_MESSAGES/django.po, agregando estas líneas:

    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


1
Esta es una solución terrible. Anular las cadenas de traducción es solo una idea horrible.

6

Simplemente vaya al archivo admin.py y agregue esta línea en el archivo:

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 No olvides agregar esta línea.
rkdevs

5

En primer lugar, debe agregar plantillas / admin / base_site.html a su proyecto. Este archivo se puede sobrescribir de forma segura, ya que es un archivo que los desarrolladores de Django han pensado con el propósito exacto de personalizar un poco su sitio de administración. Aquí hay un ejemplo de qué poner en el archivo:

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

Esta es una práctica común. Pero después de esto, noté que todavía me quedaba una molesta "Administración del sitio" en la página principal de índice de administración. Y esta cadena no estaba dentro de ninguna de las plantillas, sino que se configuraba dentro de la vista de administrador. Por suerte, es bastante fácil de cambiar. Suponiendo que su idioma esté configurado en inglés, ejecute los siguientes comandos desde el directorio de su proyecto:

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

Ahora abra el archivo locale / es / LC_MESSAGES / django.po y agregue dos líneas después de la información del encabezado (las dos últimas líneas de este ejemplo)

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

Después de esto, recuerde ejecutar el siguiente comando y volver a cargar el servidor de su proyecto:

$ ./manage.py compilemessages

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


Vincular a sitios externos se considera malo, ya que el enlace puede ir mal. Le recomendamos que vuelva a escribir la respuesta del sitio aquí.

Reescribí la respuesta en caso de que no quieras salir del sitio.
Soroosh

5

Desde Django 2.0 puedes agregar una sola línea url.pyy cambiar el nombre.

# url.py

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

Para versiones anteriores de Django. (<1.11 y anterior) necesita editaradmin/base_site.html

Cambiar esta línea

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

a

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

Puede verificar su djangoversión por

django-admin --version

3

no necesita cambiar ninguna plantilla para este trabajo, solo necesita actualizar la settings.pyde su proyecto. Vaya al final del settings.pyy defina esto.

admin.site.site_header = 'My Site Admin'

De esta forma, podrá cambiar el encabezado del administrador de Django. Además, puede leer más sobre la personalización y configuración de Django Admin en el siguiente enlace.

Documentación de administración de Django



3

Hay dos métodos para hacer esto:

1] Al anular base_site.htmlen django/contrib/admin/templates/admin/base_site.html: Lo siguiente es el contenido de 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 %}

Edite el título del sitio y el encabezado del sitio en el fragmento de código anterior. Este método funciona pero no es recomendable ya que es un cambio estático.

2] Al agregar las siguientes líneas en urls.pyel directorio del proyecto:

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

Se recomienda este método, ya que podemos cambiar el encabezado del sitio, el título del sitio y el título del índice sin editar base_site.html.


2

Como solo uso la interfaz de administrador en mi aplicación, lo puse en admin.py:

admin.site.site_header = 'My administration'

1

Simplemente anule la admin/base_site.htmlplantilla (copie la plantilla django.contrib.admin.templatesy coloque su propio directorio de plantilla de administrador) y reemplace el brandingbloque.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.