peliculas - Django TemplateDoesNotExist?
django wikipedia (12)
Compruebe los permisos en las plantillas y los directorios de nombre de aplicación, ya sea con ls -l o intente hacer una ruta de acceso absoluta open () desde django.
Mi máquina local ejecuta Python 2.5 y Nginx en Ubuntu 8.10, con Django integrado en el último tronco de desarrollo.
Para cada URL que solicito, arroja:
TemplateDoesNotExist at / appname / ruta 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 ubicarlo?
Ejecuto la misma aplicación en un servidor remoto con Python 2.6 en Ubuntu 9.04 sin tal problema. Otras configuraciones son iguales.
¿Hay algo mal configurado en mi máquina local, o lo que podría haber causado tales errores que debo 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 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.
Debo usar plantillas para una aplicación interna y funciona para mí:
''DIRS'': [os.path.join(BASE_DIR + ''/THE_APP_NAME'', ''templates'')],
El error de Django TemplateDoesNotExist
significa simplemente que el marco no puede encontrar el archivo de plantilla.
Para usar la API de carga de plantillas, deberá indicarle a la estructura donde almacena sus plantillas. El lugar para hacerlo es en su archivo de settings.py
( settings.py
) por configuración TEMPLATE_DIRS
. 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 las plantillas.
Elija un directorio donde desee almacenar sus plantillas y agréguelo a TEMPLATE_DIRS, por ejemplo:
TEMPLATE_DIRS = (
''/home/django/myproject/templates'',
)
En configuración .py, elimine TEMPLATE_LOADERS y TEMPLATE DIRS Then ADD
TEMPLATES = [
{
''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
''DIRS'': [''/home/jay/apijay/templates'',],
''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'',
],
},
},
]
Encuentra esta tupla:
TEMPLATES = [
{
''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
''DIRS'': [],
''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'',
],
},
},
]
Debes agregar a ''DIRS'' la cadena
"os.path.join(SETTINGS_PATH, ''templates'')"
Así que en conjunto necesitas:
TEMPLATES = [
{
''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
''DIRS'': [os.path.join(SETTINGS_PATH, ''templates'')],
''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'',
],
},
},
]
Funciona ahora después de que probé
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.
Además, tengo que ejecutar el siguiente comando en la máquina local para hacer accesibles todos los archivos estáticos, pero en el servidor remoto todos son "root: root".
chown -R www-data:www-data /var/www/projectname/*
La máquina local se ejecuta en la edición de escritorio Ubuntu 8.04. El servidor remoto está en la edición del servidor Ubuntu 9.04.
¿Alguien sabe por qué?
Para la versión 1.9 de django, agregué
''DIRS'': [os.path.join(BASE_DIR, ''templates'')],
línea al bloque de Plantillas en settings.py Y funcionó bien
Solo una corazonada, pero mira este artículo sobre la carga de plantillas de Django . En particular, asegúrese de tener django.template.loaders.app_directories.Loader
en su lista TEMPLATE_LOADERS.
Vea en qué carpeta intenta django cargar la plantilla, mire Template-loader postmortem
en la página de error, por ejemplo, el error se relajará así:
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.filesystem.Loader: d:/projects/vcsrc/vcsrc/templates/base.html (Source does not exist)
En mi error vcsrc/vcsrc/templates/base.html
no está en la ruta.
A continuación, cambie las TEMPLATES
en el archivo setting.py
a la ruta de las plantillas
TEMPLATES = [
{
''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
# ''DIRS'': [],
''DIRS'': [os.path.join(BASE_DIR, ''vcsrc/templates'')],
...
Verifique que sus templates.html estén en /usr/lib/python2.5/site-packages/projectname/templates
dir.
Primera solución :
Esta configuración
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, ''templates''),
)
significa que Django mirará las plantillas desde templates/
directorio bajo su proyecto.
Suponiendo que su proyecto Django se encuentra en /usr/lib/python2.5/site-packages/projectname/
luego con 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 que se estructuren así:
/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html
Segunda solución :
Si eso todavía no funciona y asumiendo que tienes las aplicaciones configuradas en settings.py como esta:
INSTALLED_APPS = (
''appname1'',
''appname2'',
''appname3'',
)
De manera predeterminada, Django cargará las plantillas debajo de templates/
directorio debajo de cada aplicación instalada. Entonces, con su estructura de directorios, queremos mover nuestras plantillas para que sean así:
/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html
Espero que ayude.
SETTINGS_PATH
puede no estar definido por defecto. En ese caso, querrá definirlo (en settings.py):
import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))