usar proyectos plantillas para examples ejemplos descargar bootstrap python django django-admin

python - proyectos - ¿Cómo sobrescribir y ampliar las plantillas básicas de administrador de Django?



plantillas html para django (9)

Con django 1.5 (al menos) puede definir la plantilla que desea usar para un modeladmin particular

ver https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#custom-template-options

Puedes hacer algo como

class Myadmin(admin.ModelAdmin): change_form_template = ''change_form.htm''

Con change_form.html es una simple plantilla html que extiende admin/change_form.html (o no si quieres hacerlo desde cero)

¿Cómo puedo anular una plantilla de administrador (por ejemplo, admin / index.html) mientras la extiendo? (Ver https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template )?

Primero, sé que esta pregunta se ha realizado y respondido antes (ver Django: sobrescribir y extender una plantilla de aplicación ) pero como la respuesta dice que no es directamente aplicable si está usando el cargador de plantillas de los app_directories (que es la mayor parte del hora).

Mi solución actual es hacer copias y ampliarlas en lugar de extenderlas directamente desde las plantillas de administrador. Esto funciona muy bien, pero es realmente confuso y agrega trabajo adicional cuando cambian las plantillas de administrador.

Se podría pensar en una etiqueta de extensión personalizada para las plantillas, pero no quiero reinventar la rueda si ya existe una solución.

En una nota al margen: ¿Alguien sabe si este problema será abordado por Django?


En cuanto a que Django 1.8 es el lanzamiento actual, no hay necesidad de enlazar, copiar el administrador / plantillas a la carpeta del proyecto o instalar middlewares como se sugiere en las respuestas anteriores. Esto es lo que hay que hacer:

  1. crea la siguiente estructura de árbol (recomendada por la documentación oficial )

    your_project |-- your_project/ |-- myapp/ |-- templates/ |-- admin/ |-- myapp/ |-- change_form.html <- do not misspell this

Nota : La ubicación de este archivo no es importante. Puedes ponerlo dentro de tu aplicación y seguirá funcionando. Mientras su ubicación pueda ser descubierta por django. Lo que es más importante es que el nombre del archivo HTML tiene que ser el mismo que el nombre del archivo HTML original provisto por django.

  1. Agregue esta ruta de plantilla a su settings.py :

    TEMPLATES = [ { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', ''DIRS'': [os.path.join(BASE_DIR, ''templates'')], # <- add this line ''APP_DIRS'': True, ''OPTIONS'': { ''context_processors'': [ ''django.template.context_processors.debug'', ''django.template.context_processors.request'', ''django.contrib.auth.context_processors.auth'', ''django.contrib.messages.context_processors.messages'', ], }, }, ]

  2. Identifica el nombre y el bloque que deseas sobrescribir. Esto se hace buscando en el directorio admin / templates de django. Estoy usando virtualenv, entonces para mí, el camino está aquí:

    ~/.virtualenvs/edge/lib/python2.7/site-packages/django/contrib/admin/templates/admin

En este ejemplo, quiero modificar el formulario agregar nuevo usuario. La plantilla responsable de esta vista es change_form.html . Abra el archivo change_form.html y encuentre el {% block%} que desea extender.

  1. En su change_form.html , escriba algunas cosas como esta:

    {% extends "admin/change_form.html" %} {% block field_sets %} {# your modification here #} {% endblock %}

  2. Carga tu página y deberías ver los cambios


Estoy de acuerdo con Chris Pratt. Pero creo que es mejor crear el enlace simbólico a la carpeta original de Django donde se ubican las plantillas de administrador:

ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/ templates/django_admin

y como puede ver, depende de la versión de Python y de la carpeta donde se instaló Django. Entonces, en el futuro o en un servidor de producción, es posible que deba cambiar la ruta.


La mejor manera de hacerlo es poner las plantillas de administrador de Django dentro de su proyecto. De modo que sus plantillas estarían en templates/admin mientras que las templates/admin stock de Django estarían en say template/django_admin . Entonces, puedes hacer algo como lo siguiente:

templates / admin / change_form.html

{% extends ''django_admin/change_form.html'' %} Your stuff here

Si le preocupa mantener las plantillas de stock actualizadas, puede incluirlas con svn external o similar.


La respuesta de Chengs es correcta, sin embargo, de acuerdo con los documentos de administración, no todas las plantillas de administrador se pueden sobrescribir de esta manera: https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#overriding-admin-templates

Plantillas que pueden ser anuladas por aplicación o modelo

No todas las plantillas en contrib / admin / templates / admin pueden anularse por aplicación o por modelo. Lo siguiente puede:

app_index.html change_form.html change_list.html delete_confirmation.html object_history.html

Para aquellas plantillas que no pueden anularse de esta manera, puede anularlas para todo el proyecto. Simplemente coloque la nueva versión en su directorio templates / admin . Esto es particularmente útil para crear páginas personalizadas de 404 y 500 páginas

Tuve que sobrescribir el login.html del administrador y, por lo tanto, tuve que colocar la plantilla sobrescrita en esta estructura de carpetas:

your_project |-- your_project/ |-- myapp/ |-- templates/ |-- admin/ |-- login.html <- do not misspell this

(sin la subcarpeta myapp en el administrador) No tengo suficiente reputación para comentar en la publicación de Cheng, es por eso que tuve que escribir esto como una nueva respuesta.


Puede usar django-overextends , que proporciona una herencia de plantilla circular para Django.

Procede del Mezzanine CMS, desde donde Stephen lo extrajo en una extensión Django independiente.

Puede encontrar más información en "Anulación versus plantillas extendidas" (http: /mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-extending-templates) dentro de los documentos Mezzanine.

Para más información, consulte la herencia circular de plantillas de Stephens para Django (http: /blog.jupo.org/2012/05/17/circular-template-inheritance-for-django).

Y en Google Groups, la discusión (https: /groups.google.com/forum/#! Topic / mezzanine-users / sUydcf_IZkQ) que inició el desarrollo de esta función.

Nota:

No tengo la reputación de agregar más de 2 enlaces. Pero creo que los enlaces brindan información de fondo interesante. Así que simplemente dejé una barra después de "http (s):". Tal vez alguien con mejor reputación pueda reparar los enlaces y eliminar esta nota.


si necesita sobrescribir admin/index.html , puede establecer el parámetro index_template de AdminSite .

p.ej

# urls.py ... from django.contrib import admin admin.site.index_template = ''admin/my_custom_index.html'' admin.autodiscover()

y coloque su plantilla en <appname>/templates/admin/my_custom_index.html


This sitio tenía una solución simple que funcionaba con mi configuración de Django 1.7.

PRIMERO: Haga un enlace simbólico llamado admin_src en la plantilla / directorio de su proyecto a las plantillas de Django instaladas. Para mí en Dreamhost usando un virtualenv, mis plantillas de administrador de Django "fuente" estaban en:

~/virtualenvs/mydomain/lib/python2.7/site-packages/django/contrib/admin/templates/admin

SEGUNDO: Crea un directorio de administración en plantillas /

Así que la plantilla / directorio de mi proyecto ahora se veía así:

/templates/ admin admin_src -> [to django source] base.html index.html sitemap.xml etc...

TERCERO: en su nueva plantilla / admin / directorio crea un archivo base.html con este contenido:

{% extends "admin_src/base.html" %} {% block extrahead %} <link rel=''shortcut icon'' href=''{{ STATIC_URL }}img/favicon-admin.ico'' /> {% endblock %}

CUARTO: Agrega tu administrador favicon-admin.ico en tu carpeta de img de raíz estática.

Hecho. Fácil.


Actualización :

Lea los Documentos para su versión de Django. p.ej

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#admin-overriding-templates

Respuesta original de 2011:

Tuve el mismo problema hace un año y medio y encontré un buen cargador de plantillas en djangosnippets.org que lo hace fácil. Le permite ampliar una plantilla en una aplicación específica, lo que le permite crear su propio admin / index.html que amplía la plantilla admin / index.html desde la aplicación de administración. Me gusta esto:

{% extends "admin:admin/index.html" %} {% block sidebar %} {{block.super}} <div> <h1>Extra links</h1> <a href="/admin/extra/">My extra link</a> </div> {% endblock %}

He dado un ejemplo completo sobre cómo usar este cargador de plantillas en una publicación de blog en mi sitio web.