Ma machine locale exécute Python 2.5 et Nginx sur Ubuntu 8.10, avec Django construit à partir du dernier tronc de développement.
Pour chaque URL que je demande, il jette:
TemplateDoesNotExist at / appname / path appname / template_name.html
Django a essayé de charger ces modèles, dans cet ordre: * Utilisation du loader django.template.loaders.filesystem.function: * Utilisation du loader django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
Cherche- t-il /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html dans ce cas? La chose étrange est que ce fichier existait sur le disque. Pourquoi Django ne peut-il pas le localiser?
Je lance la même application sur un serveur distant avec Python 2.6 sur Ubuntu 9.04 sans un tel problème. Les autres paramètres sont identiques.
Y a-t-il quelque chose de mal configuré sur ma machine locale, ou qu'est-ce qui aurait pu causer de telles erreurs que je devrais examiner?
Dans mon settings.py , j'ai spécifié:
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'),
)
Il devrait rechercher les fichiers suivants:
- /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
- ...
Tous les fichiers ci-dessus existent sur le disque.
Résolu
Cela fonctionne maintenant après avoir essayé:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
C'est étrange. Je n'ai pas besoin de faire cela sur le serveur distant pour que cela fonctionne.
Réponses:
Première solution :
Ces paramètres
signifie que Django examinera les modèles du
templates/
répertoire sous votre projet.En supposant que votre projet Django se trouve à,
/usr/lib/python2.5/site-packages/projectname/
alors avec vos paramètres, django recherchera les modèles sous/usr/lib/python2.5/site-packages/projectname/templates/
Donc, dans ce cas, nous voulons déplacer nos modèles pour qu'ils soient structurés comme ceci:
Deuxième solution :
Si cela ne fonctionne toujours pas et en supposant que les applications sont configurées dans settings.py comme ceci:
Par défaut, Django chargera les modèles sous le
templates/
répertoire sous toutes les applications installées. Donc, avec votre structure de répertoires, nous voulons déplacer nos modèles pour qu'ils ressemblent à ceci:SETTINGS_PATH
ne peut pas être défini par défaut. Dans ce cas, vous voudrez le définir (dans settings.py):la source
/usr/lib/python2.5/site-packages/projectname/
?templates
n'est pas une bonne conception. Mais, comme je le sais, après avoir ajouté votreAPP_NAME
dans lesettings.py
, vousdjango
pouvez rechercher le modèle de l'application sous le répertoire qui se trouve sous leAPP_DIR
. Ainsi, vous pouvez séparer le modèle pour diverses applications. (Django 1.7 - .1.9Trouvez ce tuple:
Vous devez ajouter à 'DIRS' la chaîne
Donc, au total, vous avez besoin de:
la source
SETTINGS_PATH
n'est en fait définie nulle part, donc je ne pense pas que cette réponse fonctionnera. Peut-être que vous vouliez direBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, pas de fichierSi vous rencontrez ce problème lorsque vous ajoutez un
app
fichier. C'est probablement parce que vous en manquezsettings
. Trois étapes sont nécessaires lors de l'ajout d'un fichierapp
.1 、 Créez le répertoire et le fichier modèle.
Supposons que vous ayez un projet nommé
mysite
et que vous souhaitez ajouter unapp
nomyour_app_name
. Mettez votre fichier de modèle sousmysite/your_app_name/templates/your_app_name
comme suit.2, ajoutez votre
app
àINSTALLED_APPS
.Modifier
settings.py
3, ajoutez votre
app
répertoireDIRS
dansTEMPLATES
.Modifiez
settings.py
.la source
Dans le paramètre .py, supprimez TEMPLATE_LOADERS et TEMPLATE DIRS, puis AJOUTER
la source
J'ai eu un problème embarrassant ...
J'ai eu cette erreur parce que je me dépêchais et que j'avais oublié de mettre l'application
INSTALLED_APPS
. On pourrait penser que Django soulèverait une erreur plus descriptive.la source
Juste une intuition, mais consultez cet article sur le chargement des modèles Django . En particulier, assurez-vous de l'avoir
django.template.loaders.app_directories.Loader
dans votre liste TEMPLATE_LOADERS.la source
Vérifiez les autorisations sur les modèles et les répertoires appname, soit avec ls -l, soit essayez de faire un chemin absolu open () depuis django.
la source
Cela fonctionne maintenant après avoir essayé
C'est étrange. Je n'ai pas besoin de faire cela sur le serveur distant pour le faire fonctionner.
En outre, je dois exécuter la commande suivante sur la machine locale pour rendre tous les fichiers statiques accessibles mais sur le serveur distant, ils sont tous "root: root".
La machine locale fonctionne sur l'édition de bureau Ubuntu 8.04. Le serveur distant est sur l'édition du serveur Ubuntu 9.04.
Quelqu'un sait pourquoi?
la source
Pour la version 1.9 de django, j'ai ajouté
ligne vers le bloc Modèles dans settings.py Et cela a bien fonctionné
la source
Django
TemplateDoesNotExist
erreur signifie simplement que le framework ne peut pas trouver le fichier de modèle.Pour utiliser l'API de chargement de modèles, vous devez indiquer au framework où vous stockez vos modèles. L'endroit pour faire cela est dans votre fichier de paramètres (
settings.py
) parTEMPLATE_DIRS
définissant. Par défaut, c'est un tuple vide, donc ce paramètre indique au mécanisme de chargement de modèles de Django où chercher les modèles.Choisissez un répertoire dans lequel vous souhaitez stocker vos modèles et ajoutez-le à TEMPLATE_DIRS, par exemple:
la source
Voir quel dossier django essaie de charger le modèle regarde
Template-loader postmortem
dans la page d'erreur, par exemple, l'erreur ne ressemblera à rien:Dans mon erreur
vcsrc\vcsrc\templates\base.html
pas en chemin.Puis changez
TEMPLATES
dans lesetting.py
fichier le chemin de vos modèlesla source
Je dois utiliser des modèles pour une application interne et cela fonctionne pour moi:
la source
Assurez - vous que vous avez ajouté votre application à la
project-name/app-namme/settings.py
INSTALLED_APPS: .Et sur
project-name/app-namme/settings.py
TEMPLATES: .la source
Vérifiez que vos templates.html sont dans
/usr/lib/python2.5/site-packages/projectname/templates
dir.la source
Salut les gars, j'ai trouvé une nouvelle solution. En fait, il est défini dans un autre modèle, donc au lieu de définir vous-même TEMPLATE_DIRS, mettez le nom de votre chemin de répertoire à leur:
la source
Je suis gêné de l'admettre, mais le problème pour moi était qu'un modèle avait été spécifié comme
….hml
au lieu de….html
. Fais attention!la source
J'ai ajouté ceci
et il montrait toujours l'erreur, puis j'ai réalisé que dans un autre projet, les modèles montraient sans ajouter ce code dans le fichier settings.py alors j'ai vérifié ce projet et j'ai réalisé que je n'avais pas créé d'environnement virtuel dans ce projet, alors j'ai fait
et ça a marché, je ne sais pas pourquoi
la source
J'ai rencontré ce problème. Voici comment j'ai résolu ceci:
Regardez votre settings.py, localisez la
TEMPLATES
variable, dans les TEMPLATES, ajoutez le chemin de vos modèles dans laDIRS
liste. Pour moi, je définis d'abord le chemin de mes modèles surTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
, puis je les ajouteTEMPLATES_PATH
à laDIRS
liste'DIRS':[TEMPLATES_PATH,]
. Ensuite, redémarrez le serveur, l'exception TemplateDoesNotExist a disparu. C'est tout.la source
dans votre
setting.py
fichier remplacezDIRS
dans leTEMPLATES
tableau par cecipour ça
mais je pense que vous devez savoir que vous devez créer un dossier avec un nom
templates
et qu'il devrait sur le chemin racine sinon vous devez changer laDIRS
valeurla source
1. créez un dossier `` modèles '' dans votre `` application '' (disons que vous avez nommé une telle application) et vous pouvez placer le fichier html ici. Mais il est fortement recommandé de créer un dossier avec le même nom ('app') dans le dossier 'templates' et de ne mettre les html qu'ensuite. Dans le dossier 'app / templates / app'
2. maintenant dans les urls.py de 'app', mettez:
3. dans views.py de 'app', mettez:
la source