2010-10-31 13 views
5

Ya he configurado las cosas necesarias para trabajar con la función de extensión de plantillas en django. Aquí está mi códigos:django extends problem - la plantilla hija no muestra

en settings.py

def my_dir(): 
    import os.path 
    return os.path.abspath(os.path.dirname(__file__)) 
TEMPLATE_DIRS = (my_dir() + '/app/templates',) #dynamic template directory 

en base.html - ubicado en app/templates/sitio

.... 
<div id="SideBar" class="FloatLeft"> 
{% block sidebar %} {% endblock %} 
</div> 
.... 

en sidebar.html - ubicado en app/templates/sitio

{% extends "site/base.html" %} 
{% block sidebar %} 
    some code here 
{% endblock %} 

he intentado también el {% include "sitio/sidebar.html" %} etiqueta en el base.html para comprobar el directorio de plantillas, y sí la etiqueta include está funcionando ...

¿cuál es el problema en {% extends%}? ¿por qué es imposible detectar su plantilla padre ..

por favor me ayudan a chicos .. su ayuda es muy apreciada ... todavía estoy esperando la respuesta .. TNX

+1

¿Cómo se ve tu vista? – sunn0

Respuesta

6

qué plantilla se le renderizado en su opinión? Debe ser hijo, no el padre.

+0

Gracias, resuelve mi problema. Miré más esa opción. Muchas gracias. su derecho a que mi vista esté apuntando en la plantilla principal ... ahora lo he cambiado a sidebar.html y ahora funciona perfectamente ... :) muchas gracias. :) – EVG

+0

por cierto ... ¿cómo cerrar este tema? gracias una vez más :) – EVG

0

Hay un montón de problemas. La respuesta breve es "No, no puede cambiar directorios de plantillas sobre la marcha, e incluso si pudiera, definitivamente no lo haría de la manera en que lo hace ahora"

+0

Esto no está cambiando sobre la marcha, está usando el directorio en el que se encuentra settings.py, y eso solo ocurre cuando se importa settings.py. – Tom

0

Su problema principal es que Olvidaste una coma en la configuración TEMPLATE_DIRS. Pruebe esto:

TEMPLATE_DIRS = (my_dir() + '/app/templates',) 

Por favor, ignore la respuesta de cheshire.

+0

ive cambiarlo a TEMPLATE_DIRS = (mi_dir() + '/ app/templates',) pero todavía no tuve suerte. :( – EVG

+0

Aún estoy esperando respuesta ... ¿alguien puede ayudarme con respecto a este asunto? Estoy atrapado en este problema :( – EVG

0

Utilice os.path.join para combinar 2 directorios.

import os.path 
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'), 
) 

Aquí estoy asumiendo que templates es un directorio donde guarda sus plantillas. Ahora, para acceder a las plantillas, este es el directorio base para ellas. base.html Así extender en algún otro archivo haces como esto -

{% extends "base.html" %} 
... 
{% endblock %} 
+0

he intentado su solución pero la plantilla hija aún no se muestra .. Carpeta de plantillas donde se encuentran todos mis archivos html está dividido en muchas carpetas, en el problema, base.html está ubicado en la carpeta del sitio. – EVG

+0

¿hay alguna configuración que no sea la de TEMPLATE_DIRS que deba configurarse? Creo que mi TEMPLATE_DIRS está funcionando porque las etiquetas {% include%} están funcionando bien .. – EVG

+0

'TEMPLATE_DIRS' es el único lugar donde establece la ruta de las plantillas. Coloque todas las plantillas en un solo lugar a menos que tenga una razón sólida para no hacerlo. –

0

¿Seguro que tiene la configuración adecuada cargadores de plantillas? Usted debe tener esto en su settings.py:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 
1

no estoy seguro de cuál es el problema yout es, pero usted debe comprobar los siguientes puntos:

  • El {% extends%} taje debe ser el primero en el archivo de plantilla (y poner una línea en blanco después para estar seguro)
  • Creo que la referencia a la plantilla base es relativa a usted TEMPLATE_DIR. Pruebe diferentes cosas como colocar ambas plantillas en el mismo nivel, etc.
  • Compruebe todas las etiquetas en ambas plantillas para asegurarse de que están formateadas correctamente
  • Compruebe la codificación de los archivos. Si es UTF-8, intente deshabilitar la lista de materiales en ambos archivos.
  • Quizás sea un problema con la configuración de su directorio. Intenta codificar el camino absoluto para verificarlo.

Estos son los problemas que puedo imaginar, pero no puedo garantizar que funcionen.

+0

gracias por su respuesta ... Daniel obtuvo la solución correcta. Espero que este tema se lo recuerde a los demás :) – EVG

Cuestiones relacionadas