¿Cómo cambiar el título del sitio, el encabezado del sitio y el título del índice en Django Admin?

7 minutos de lectura

avatar de usuario de samurailawngnome
samurailawnnomo

¿Cómo puedo cambiar el título del sitio? Django site adminel encabezado del sitio Django administration y el título del índice Site administration en el administrador de Django?

ingrese la descripción de la imagen aquí

  • Esto está cubierto en el tutorial.

    – djvg

    9 de diciembre de 2019 a las 12:19

  • La mejor respuesta está abajo.

    – Guettli

    15 de diciembre de 2020 a las 20:05

Avatar de usuario de Reto Aebersold
Reto Aebersold

A partir de Django 1.7, no es necesario anular las plantillas. Ahora puede implementar sitio_encabezado, site_titley index_title atributos en una costumbre AdminSitio 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:

administrador.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)),
)

Actualizar: Como lo señaló oxfn, simplemente puede configurar el site_header en tus urls.py o admin.py directamente sin subclasificar AdminSite:

admin.site.site_header="My administration"

  • 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

    29 de julio de 2014 a las 16:53

  • @DavidArcos Debe registrar sus modelos en new admin_site que creaste. Como admin_site.register(MyModel, ModelAdmin)

    – Andrei Fedoseev

    1 de agosto de 2014 a las 13:06

  • Si también se debe personalizar un encabezado en django.auth.views (eso depende de admin/base_site.html plantilla, por ejemplo, password_reset) entonces también extra_context debe usarse en URL: por ejemplo url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})

    – Hynekcer

    18 de febrero de 2017 a las 11:55

  • Algo que debe saber sobre esta forma 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 (extendiendo la plantilla base de administración), siempre tomarán la “Administración de Django” predeterminada. título.

    – Kedare

    31 de marzo de 2017 a las 9:12

  • @oxfn Si tengo más de una aplicación, la admin.site.site_header configuración en la que app*/admin.py haría efecto?

    – nalzok

    13 de mayo de 2017 a las 9:45


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

admin.site.site_header="My admin"

O uno puede implementar algo de magia de creació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 subclasificar AdminSite

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

    – Ghasem

    11 de febrero de 2015 a las 15:45

  • Si está cambiando el encabezado, probablemente también desee cambiar el título del sitio, lo que se puede lograr con: admin.site.site_title = 'My site admin'.

    – mcastillo

    18 de julio de 2015 a las 21:15

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

    – sergio

    04/01/2016 a las 22:00


  • Ojalá hubiera encontrado esto primero… Prestando atención a los documentos, subclasifiqué AdminSite y pasó un tiempo tratando de hacer que funcione con autodiscover() pero finalmente pensé en esta solución por mi cuenta. De hecho, tengo mi anulación en admin.pyque creo que es más limpio ya que se mantiene junto con toda la otra lógica relacionada con la administración

    – usuario193130

    19 de abril de 2016 a las 0:20

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

    – Sergio Morstabilini

    29 de abril de 2017 a las 9:32

Avatar de usuario de Gregory
Gregorio

En urls.py puede 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..

  • Esta debería ser la respuesta CORRECTA a esta pregunta. Esta es la solución más apropiada y elegante.

    – Gregorio

    25 de noviembre de 2020 a las 12:37

  • hay una manera de tener username de usuario registrado con título de índice Por ejemplo: admin.site.index_title = request.user.username+' Features area'

    – Azhar Uddin Jeque

    31/01/2022 a las 11:00

avatar de usuario de user608133
usuario608133

Actualizar: Si está utilizando Django 1.7+, vea la respuesta a continuación.


Respuesta original de 2011:
Necesitas crear tu propio administrador base_site.html plantilla para hacer esto. La forma más fácil es crear el archivo:

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

Esta debe ser una copia de la original base_site.htmlexcepto 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:

  • Cerciorarse /projectdir/templates/ se agrega en TEMPLATE_DIRS.
  • Cerciorarse django.template.loaders.filesystem.Loader se agrega en TEMPLATE_LOADERS.

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

avatar de usuario de kuzavas
kuzavas

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

En settings.py agregar:

ADMIN_SITE_HEADER = "My shiny new administration"

En urls.py agregar:

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

  • ¿Hay un mejor lugar para hacer esto que usar urls.py?

    – Venkat Kotra

    13/03/2016 a las 20:21

  • @VenkatKotra Sí, en admin.py. Si aún no lo tienes, simplemente créalo y no olvides agregar from django.contrib import admin.

    – usuario193130

    19 de abril de 2016 a las 0:26

  • 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

    3 de julio de 2016 a las 3:13

  • No hay una configuración que Django mire llamada ADMIN_SITE_HEADERlo único que importa aquí es la línea en urls.py

    – Flamm

    30 de mayo de 2018 a las 7:57

  • Seguí de esta manera y primero definí el nombre en la configuración y luego lo importé a url.py como se explicó anteriormente. Hice lo mismo para el inicio de sesión y el título html y los tres funcionaron bien. ==> en url.py: {{ from django.conf import settings }} admin.site.site_header = settings.ADMIN_SITE_HEADER admin.site.site_title = settings.ADMIN_SITE_TITLE admin.site.index_title = settings.ADMIN_SITE_INDEX

    – HassanSh__3571619

    11 de octubre de 2020 a las 4:28


Avatar de usuario de Ganesh
Ganesh

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"

  • ¿Hay un mejor lugar para hacer esto que usar urls.py?

    – Venkat Kotra

    13/03/2016 a las 20:21

  • @VenkatKotra Sí, en admin.py. Si aún no lo tienes, simplemente créalo y no olvides agregar from django.contrib import admin.

    – usuario193130

    19 de abril de 2016 a las 0:26

  • 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

    3 de julio de 2016 a las 3:13

  • No hay una configuración que Django mire llamada ADMIN_SITE_HEADERlo único que importa aquí es la línea en urls.py

    – Flamm

    30 de mayo de 2018 a las 7:57

  • Seguí de esta manera y primero definí el nombre en la configuración y luego lo importé a url.py como se explicó anteriormente. Hice lo mismo para el inicio de sesión y el título html y los tres funcionaron bien. ==> en url.py: {{ from django.conf import settings }} admin.site.site_header = settings.ADMIN_SITE_HEADER admin.site.site_title = settings.ADMIN_SITE_TITLE admin.site.index_title = settings.ADMIN_SITE_INDEX

    – HassanSh__3571619

    11 de octubre de 2020 a las 4:28


Avatar de usuario de Muhammad Abrar Anwar
Mohamed Abrar Anwar

La forma más fácil de hacerlo, asegúrese de tener

from django.contrib import admin

y luego simplemente agregue estos en la parte inferior de url.py de tu aplicación principal

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

¿Ha sido útil esta solución?