Mi máquina local ejecuta Python 2.5 y Nginx en Ubuntu 8.10, con Django integrado desde el último tronco de desarrollo.
Por cada URL que solicito, arroja:
TemplateDoesNotExist en / appname / path appname / template_name.html
Django intentó cargar estas plantillas, en este orden: * Usando el cargador django.template.loaders.filesystem.function: * Usando el cargador django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
¿Está buscando /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html en este caso? Lo extraño es que este archivo existe en el disco. ¿Por qué Django no puede localizarlo?
Ejecuto la misma aplicación en un servidor remoto con Python 2.6 en Ubuntu 9.04 sin ese problema. Otras configuraciones son iguales.
¿Hay algo mal configurado en mi máquina local, o qué podría haber causado tales errores que debería investigar?
En mi settings.py , he especificado:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Debería estar buscando los siguientes archivos:
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
- ...
Todos los archivos anteriores existen en el disco.
Resuelto
Funciona ahora después de que lo intenté:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
Es extraño. No necesito hacer esto en el servidor remoto para que funcione.
Respuestas:
Primera solución :
Estas configuraciones
significa que Django mirará las plantillas del
templates/
directorio bajo su proyecto.Suponiendo que su proyecto Django se encuentre en
/usr/lib/python2.5/site-packages/projectname/
su configuración, django buscará las plantillas en/usr/lib/python2.5/site-packages/projectname/templates/
Entonces, en ese caso, queremos mover nuestras plantillas para estructurarlas así:
Segunda solución :
Si eso todavía no funciona y suponiendo que tiene las aplicaciones configuradas en settings.py de esta manera:
Por defecto, Django cargará las plantillas en el
templates/
directorio debajo de cada aplicación instalada. Entonces, con su estructura de directorio, queremos mover nuestras plantillas para que sean así:SETTINGS_PATH
puede no estar definido por defecto. En cuyo caso, querrá definirlo (en settings.py):fuente
/usr/lib/python2.5/site-packages/projectname/
?templates
no es un buen diseño. Pero, como sé, después de agregar suAPP_NAME
en elsettings.py
,django
podría ir a buscar la plantilla de la aplicación en el directorio que está debajo delAPP_DIR
. Por lo tanto, puede separar la plantilla para varias aplicaciones. (Django 1.7 - .1.9Encuentra esta tupla:
Debe agregar a 'DIRS' la cadena
Así que en conjunto necesitas:
fuente
SETTINGS_PATH
en realidad no está definido en ningún lado, por lo que no creo que esta respuesta funcione. Tal vez quisiste decirBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, no archivoSi encuentra este problema cuando agrega un
app
desde cero. Probablemente sea porque extrañas algosettings
. Se necesitan tres pasos al agregar unapp
.1 、 Cree el directorio y el archivo de plantilla.
Supongamos que tiene un proyecto con nombre
mysite
y desea agregar unapp
nombreyour_app_name
. Coloque su archivo de plantilla debajo de lamysite/your_app_name/templates/your_app_name
siguiente manera.2 、 Añade tu
app
aINSTALLED_APPS
.Modificar
settings.py
3 、 Agregue su
app
directorio aDIRS
enTEMPLATES
.Modificar
settings.py
.fuente
En la configuración .py, elimine TEMPLATE_LOADERS y TEMPLATE DIRS y luego AGREGUE
fuente
Tuve un problema embarazoso ...
Recibí este error porque estaba apurado y olvidé poner la aplicación
INSTALLED_APPS
. Se podría pensar que Django generaría un error más descriptivo.fuente
Solo una corazonada, pero mira este artículo sobre la carga de plantillas de Django . En particular, asegúrese de tenerlo
django.template.loaders.app_directories.Loader
en su lista TEMPLATE_LOADERS.fuente
Verifique los permisos en plantillas y directorios de nombres de aplicaciones, ya sea con ls -l o intente hacer una ruta absoluta open () desde django.
fuente
Funciona ahora después de que lo intenté
Es extraño. No necesito hacer esto en el servidor remoto para que funcione.
Además, tengo que ejecutar el siguiente comando en la máquina local para que todos los archivos estáticos sean accesibles, pero en el servidor remoto todos son "root: root".
La máquina local se ejecuta en la edición de escritorio Ubuntu 8.04. El servidor remoto está en la edición de servidor Ubuntu 9.04.
¿Alguien sabe por qué?
fuente
Para la versión 1.9 de django, agregué
línea al bloque de Plantillas en settings.py Y funcionó bien
fuente
El
TemplateDoesNotExist
error de Django significa simplemente que el marco no puede encontrar el archivo de plantilla.Para utilizar la API de carga de plantillas, deberá indicarle al marco dónde almacena sus plantillas. El lugar para hacerlo es en su archivo de configuración (
settings.py
)TEMPLATE_DIRS
configurando. Por defecto es una tupla vacía, por lo que esta configuración le dice al mecanismo de carga de plantillas de Django dónde buscar plantillas.Elija un directorio donde desee almacenar sus plantillas y agréguelo a TEMPLATE_DIRS, por ejemplo:
fuente
Vea qué carpeta django intenta cargar la plantilla mira
Template-loader postmortem
en la página de error, por ejemplo, el error se ralentizará así:En mi error
vcsrc\vcsrc\templates\base.html
no en la ruta.A continuación, cambiar
TEMPLATES
desetting.py
archivo en su camino plantillasfuente
Debo usar plantillas para una aplicación interna y funciona para mí:
fuente
Asegúrese de que ha añadido a su aplicación a la
project-name/app-namme/settings.py
INSTALLED_APPS: .Y en
project-name/app-namme/settings.py
plantillas: .fuente
Verifique que sus templates.html estén en
/usr/lib/python2.5/site-packages/projectname/templates
dir.fuente
Hola chicos, encontré una nueva solución. En realidad, se define en otra plantilla, por lo que en lugar de definir TEMPLATE_DIRS usted mismo, coloque el nombre de la ruta del directorio en su:
fuente
Me da vergüenza admitir esto, pero el problema para mí fue que se había especificado una plantilla en
….hml
lugar de….html
. ¡Cuidado!fuente
Agregué esto
y todavía mostraba el error, luego me di cuenta de que en otro proyecto las plantillas se mostraban sin agregar ese código en el archivo settings.py, así que verifiqué ese proyecto y me di cuenta de que no creé un entorno virtual en este proyecto, así que lo hice
y funcionó, no sé por qué
fuente
Se me ocurrió este problema. Así es como resolví esto:
Mire su settings.py, ubique a
TEMPLATES
variable, dentro de las PLANTILLAS, agregue su ruta de plantillas dentro de laDIRS
lista. Para mí, primero configuro mi ruta de plantillas comoTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
, luego agregoTEMPLATES_PATH
a laDIRS
lista'DIRS':[TEMPLATES_PATH,]
,. Luego reinicie el servidor, la excepción TemplateDoesNotExist desaparece. Eso es.fuente
en su
setting.py
archivo reemplazarDIRS
enTEMPLATES
matriz con estoa esto
pero creo que lo que necesita saber es que debe hacer una carpeta con el nombre
templates
y debe hacerlo en la ruta raíz; de lo contrario, debe cambiar elDIRS
valorfuente
1.Cree una carpeta 'plantillas' en su 'aplicación' (digamos que ha llamado así a su aplicación) y puede colocar el archivo html aquí. Pero se recomienda crear una carpeta con el mismo nombre ('aplicación') en la carpeta 'plantillas' y solo luego colocar htmls allí. En la carpeta 'app / templates / app'
2.ahora en urls.py de 'aplicación' poner:
3. en 'views' de la aplicación 'put:
fuente