2011-02-04 7 views
11

Estoy usando Django 1.2.4 en Ubuntu 10.10. Estoy intentando anular la plantilla index.html para el módulo de administración. He estado siguiendo estos instructions. También miré esto question, pero todavía estoy teniendo dificultades.Dificultad para anular la plantilla de administrador de Django

Las instrucciones dicen para crear un directorio admin en el directorio de plantillas:

templates/ 
    admin/ 
     index.html 

Quiero anular un solo bloque en el index.html. (En realidad, todo lo que quiero hacer es anexar algún texto al final hay una manera más fácil de copiar/pegar todo el bloque y el cambio de la misma.?) (actualización: Parece que {{block.super}} puede ayudar.)

Para señal de que estoy anulando, pongo esto en la parte superior de mi index.html:

{% extends "admin/index.html" %} 

por supuesto, que resulta en un desbordamiento de pila (de la terminal):

Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'> ignored 

¿Cuál es la correcta forma de hacer esto? Probé un enlace simbólico por una respuesta a la cuestión vinculada, pero que resultó en los siguientes:

[email protected]:~/foo$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ django_admin 
[sudo] password for me: 
ln: creating symbolic link `django_admin': Protocol error 

¿Qué estoy haciendo mal?

Respuesta

1

No estoy seguro si has encontrado la respuesta, pero es necesario cambiar

{% extends "admin/index.html" %} 

a

{% extends "admin/base_site.html" %} 

ya que es lo sobrescribe la página original index.html. Debido a que el sistema Django busca en la carpeta de plantillas antes de usar el administrador predeterminado, en este caso encuentra el admin/index.html en sus plantillas, luego intenta extenderse con la extensión (de ahí el error de recursión).

Como referencia puede personalizar el base_site.html en sus plantillas también, se extiende base.html. Lo mejor que puede hacer es copiar el original de:

/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ 

y pégala en la carpeta de plantillas como punto de partida

13

El error recursividad se debe a que está extendiendo el admin/index.html consigo mismo.

Puede:

  • copiar toda la plantilla admin/index.html en su directorio templates/admin/, y que reemplazará a la plantilla por defecto con el suyo
  • anulación del index.html por aplicación o modelo, como se explica here

Sé que es tarde después de la pregunta, pero ya sabes, google traveling ...

7

Modificar la configuración.py con una carpeta de plantillas adicionales, por ejemplo:

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    "/home/mysite/webapps/django/myproject/templates", 
    "/home/mysite/webapps/django/lib/python2.7/django/", # extra folder 
) 

Luego, en miproyecto/plantillas/admin añadir su index.html como:

{% extends "contrib/admin/templates/admin/index.html" %} 

{% block branding %} 
    <h1 id="site-name">Administration for TheLittleButtonCo</h1> 
{% endblock %} 

Las variaciones son posibles, obviamente. Esto funciona en Django 1.3.1 definitiva

+0

solución limpia! –

+0

¿cómo se especifica una ruta a la instalación jdango sin hardcoding? – maazza

+1

@maazza: 'import django; os.path.dirname (django .__ file __) ' – utapyngo

Cuestiones relacionadas