2010-10-31 6 views
1

Je cours Python 2.6.1 et Django 1.2.1 sur Windows XP SP3. J'utilise JetBrains PyCharm 1.0 pour créer et déployer mes applications Django. Je suis relativement inexpérimenté avec Python, et je commence à apprendre Django en suivant "Écrire votre première application Django" sur le site web - l'application de sondage. Je suis coincé sur .Django ne trouve pas mes modèles

Tout va bien lorsque j'ajoute les fonctions de rappel simples pour "Ecrire votre première vue". Je rencontre le hic quand j'arrive à "Ecrire des vues qui font quelque chose."

J'ai suivi les instructions pour modifier l'affichage de l'index:

  1. Ajouter une nouvelle méthode pour views.py (Note - modèle est prêt à partir 'polls/index.html'):
  2. Ajouter un index. modèle html à site-templates/polls/ dossier
  3. Modifier settings.py pour pointer vers site-templates dossier

Voici le code dans mon views.py:

from django.template import Context, loader 
from polls.models import Poll 
from django.http import HttpResponse 

def index(request): 
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5] 
    t = loader.get_template('polls/index.html') 
    c = Context({ 
     'latest_poll_list': latest_poll_list, 
    }) 
    return HttpResponse(t.render(c)) 

est ici la ligne dans mon settings.py:

TEMPLATE_DIRS = ('/site-templates/') 

Mais je reçois ce message quand je lance:

TemplateDoesNotExist at /polls/ 
polls/index.html 
Request Method: GET 
Request URL: http://localhost:8000/polls/ 
Django Version: 1.2.1 
Exception Type: TemplateDoesNotExist 
Exception Value:  
polls/index.html 

L'exception est levée dans loader.py. Mes paramètres de débogage ressemblent à ceci:

TEMPLATE_CONTEXT_PROCESSORS 
('django.core.context_processors.auth', 'django.core.context_processors.request') 
TEMPLATE_DEBUG 
True 
TEMPLATE_DIRS 
('/site-templates',) 
TEMPLATE_LOADERS  
('django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader') 

Ma structure de répertoire ressemble à ceci:

alt text

Qu'est-ce que je manque? Le settings.py est-il incorrect? S'il vous plaît donnez votre avis.

+0

Vous spécifiez le contenu de 'TEMPLATE_DIRS' deux fois (le 2 est correct, le 1er pas). Lequel utilisez-vous vraiment? –

+0

Pouvez-vous publier votre hiérarchie de dossiers? –

+0

La première entrée provient de mes settings.py; la seconde est ce qui est renvoyé dans le navigateur lorsque j'appelle l'URL. – duffymo

Répondre

3

Vous devez utiliser des chemins absolus dans le paramètre TEMPLATE_DIRS.

chose pratique à faire, en haut de vos paramètres, insérez:

import os 
DIRNAME = os.path.abspath(os.path.dirname(__file__)) 

Alors partout où vous utilisez un chemin, utilisez os.path.join. exemple, votre TEMPLATE_DIRS deviendrait:

TEMPLATE_DIRS = (
    os.path.join(DIRNAME, 'site-templates/'), 
) 
+1

Toujours pas - Je reçois le même message d'erreur. – duffymo

+0

Désolé, je n'ai jamais utilisé django ou même python d'ailleurs sur windows. Il doit y avoir des bizarreries sur les chemins que je ne connais pas – zsquare

+0

J'ai vu ça sur Linux et Windows. Ce dont il se plaint, c'est que Template_dirs ne traverse pas correctement une liste. Vous devriez théoriquement être en mesure de spécifier des répertoires de modèles spécifiques à une application en effectuant une liste récursive et en recherchant des dossiers de modèles. Ensuite, ajoutez-les à la liste. Les entrées Template_dirs à entrées multiples: a) n'analysent pas intuitivement ou b) échouent à analyser. Je soupçonne que le dernier puisque la sortie de débogage me donne seulement un dossier ouvert l'échec/dossier n'existe pas l'erreur et c'est la première entrée. – RobotHumans

1

Cela va sûrement résoudre le problème, au lieu de tous les essayer ci-dessus en ajoutant seulement en dessous de la ligne à settings.py :

TEMPLATE_DIRS = (
    "appname/templates", 
) 
+0

Pouvez-vous expliquer pourquoi vous pensez que cela * va sûrement résoudre le problème *? – djikay

4

J'ai été confronté au même problème.L'erreur dans mon cas était que l'application ne figurait pas dans la liste INSTALLED_APPS du fichier settings.py du projet.

L'erreur déclenche un message d'erreur indiquant une erreur similaire.

line 25, in get_template TemplateDoesNotExist(template_name, chain=chain) 
django.template.exceptions.TemplateDoesNotExist: authControll/index.html 

settings.py -> Définition de l'application

INSTALLED_APPS = [ 
    ..., 
    'authControll' 
] 
Questions connexes