¿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".
¿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".
Respuestas:
Actualización : si está utilizando Django 1.7+, consulte la respuesta a continuación .
Respuesta original de 2011:
debe crear su propia base_site.html
plantilla 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
:
/projectdir/templates/
agregarlo a TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
agregarlo a TEMPLATE_LOADERS
.Consulte los documentos para obtener más información sobresettings.py
.
{% extends "admin/base.html" %}
ingresar /<projectdir>/templates/admin/base_site.html
, y simplemente redefinir los bloques que necesita, es decir {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
configuración. Sólo TEMPLATE_DIR
se parece lo suficiente
A partir de Django 1.7 no necesita anular plantillas. Ahora puede aplicar site_header , site_title
y index_title
los 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_header
en su urls.py
o admin.py
directamente sin subclasificar AdminSite
:
admin.site.site_header = 'My administration'
admin_site
que creó. Me gustaadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
plantilla, por ejemplo, password_reset), también se extra_context
debe usar en las URL: por ejemplourl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
admin.site.site_header
en qué configuración app*/admin.py
entraría en vigor?
Hay una manera fácil de configurar el encabezado del sitio de administración: asígnelo a la instancia de administrador actual de urls.py
esta 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
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
y 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
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 .
Una solución completa simple 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
admin.py
. Si aún no lo tiene, simplemente créelo y no olvide agregarlo from django.contrib import admin
.
ADMIN_SITE_HEADER
, lo único que importa aquí es la líneaurls.py
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.py
de su aplicación principal
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
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'
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 trans
etiqueta de la plantilla). Puede realizar cambios en los archivos de traducción para anular el texto sin hacer su propia copia de las plantillas.
mkdir locale
./manage.py makemessages
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"
./manage.py compilemessages
Ver https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
Simplemente vaya al archivo admin.py y agregue esta línea en el archivo:
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
No olvides agregar esta línea.
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/
Desde Django 2.0 puedes agregar una sola línea url.py
y 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 django
versión por
django-admin --version
no necesita cambiar ninguna plantilla para este trabajo, solo necesita actualizar la settings.py
de su proyecto. Vaya al final del settings.py
y 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.
Puedes usar AdminSite.site_header
para cambiar ese texto. Aquí están los documentos
Hay dos métodos para hacer esto:
1] Al anular base_site.html
en 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.py
el 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
.
Simplemente anule la admin/base_site.html
plantilla (copie la plantilla django.contrib.admin.templates
y coloque su propio directorio de plantilla de administrador) y reemplace el branding
bloque.