2009-12-24 15 views
8

estoy obteniendo el camino de la plantilla medianterender_to_response da TemplateDoesNotExist

paymenthtml = os.path.join(os.path.dirname(__file__), 'template\\payment.html') 

y decir que es en otra aplicación donde paymenthtml se copia en payment_template

return render_to_response(self.payment_template, self.context, RequestContext(self.request)) 

pero me da error

TemplateDoesNotExist at/test-payment-url/

E: \ testapp \ plantilla payment.html \

Por qué está llegando el error?

Editar: He realizado el siguiente cambio en settings.py y es capaz de encontrar la plantilla, pero no puedo codificar el camino en la producción, ¿alguna pista?

TEMPLATE_DIRS = ("E:/testapp") 

Respuesta

21

Parece que Django solo cargará plantillas si están en un directorio que usted define en TEMPLATE_DIRS, incluso si existen en otro lugar.

Prueba esto en settings.py:

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
# Other settings... 
TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, "templates"), 
) 

y luego en la vista:

return render_to_response("payment.html", self.context, RequestContext(self.request)) 
# or 
return render_to_response("subdir/payment.html", self.context, RequestContext(self.request)) 

Esto haría que sea E:\path\to\project\templates\payment.html o E:\path\to\project\templates\subdir\payment.html. El punto es que están dentro del directorio que especificamos en settings.py.

+0

aha , no hardcode, voy a probar esto, thx tanto – dhaval

+5

Este es un enfoque sólido, pero quería agregar un poco de información acerca de cómo Django carga plantillas. Se verá en los directorios enumerados en la variable TEMPLATE_DIRS, en el orden en que se enumeran. Se usará la primera coincidencia que encuentre. Después de eso, Django buscará en los diversos módulos de aplicaciones bajo app.templates y cargará desde allí. La carga de estilo 'cascada' es muy útil para reemplazar selectivamente plantillas de aplicaciones reutilizables, etc. – shawnr

2

No tengo un django aquí, pero creo que debería usar/en lugar de \\?

pitón le ayuda acerca de las barras a través de sistemas operativos

+0

He intentado ambos y solo luego publicado aquí, no funciona, thx para ayuda aunque – dhaval

1

¿Estás seguro que existe este archivo en su sistema?

E:\testapp\template\payment.html

Este mensaje de error es bastante sencillo y se ve cuando Django intenta encontrar el archivo de plantilla por la ruta del sistema de archivos y no puede verlo.

Si el archivo existe, el siguiente paso sería verificar los permisos en ese archivo y los directorios para asegurarse de que esto no sea un problema de permisos. Si su unidad E: es una unidad de red mapeada de algún recurso compartido de red, entonces también debe verificar los permisos de uso compartido.

+1

sí el archivo se abre directamente en el navegador y no hay problemas de permisos, es obvio pero no funciona y por lo tanto tuvo que publicar para ayuda – dhaval

11

Por cierto: una cosa difícil es que django arroja TemplateDoesNotExist incluso si la plantilla representada incluye una plantilla que no existe - {% include "some/template.html" %} ... este conocimiento me ha costado un poco de tiempo y los nervios.

+2

Solo un transeúnte que quiere decir: GRACIAS. –

Cuestiones relacionadas