Django importation error: No module named modèles
Je reçois l'erreur Could not import movies.views. Error was: No module named models
Voici mon traceback:
Environment:
Request Method: GET
Request URL: http://localhost:8000/movies/awesome-movie/
Django Version: 1.3.1
Python Version: 2.7.3
Installed Applications:
['django.contrib.auth',
'username_patch',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.flatpages',
'south',
'tagging',
'tagging_autocomplete',
'accounts',
'movies',
'tracking',
'djcelery',
'pagination']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'pagination.middleware.PaginationMiddleware')
Traceback:
File "/Users/jeff/Code/filmlibrary/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
101. request.path_info)
File "/Users/jeff/Code/filmlibrary/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
252. sub_match = pattern.resolve(new_path)
File "/Users/jeff/Code/filmlibrary/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
252. sub_match = pattern.resolve(new_path)
File "/Users/jeff/Code/filmlibrary/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
158. return ResolverMatch(self.callback, args, kwargs, self.name)
File "/Users/jeff/Code/filmlibrary/lib/python2.7/site-packages/django/core/urlresolvers.py" in _get_callback
167. raise ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e)))
Exception Type: ViewDoesNotExist at /movies/awesome-movie/
Exception Value: Could not import movies.views. Error was: No module named models
Je ne sais pas pourquoi j'ai cette erreur. Mon code est comme suit...
J'ai un django app appelé tracking
et un autre appelé movies
. J'ai un fichier python appelé tracking.py
dans le tracking
application, elle se compose d'utiliser le code suivant:
filmlibrary/tracking/tracking.py
from movies.models import Movie
from tracking.models import MovieView
import os
import base64
def tracking_id(request):
try:
return request.session['tracking_id']
except KeyError:
request.session['tracking_id'] = base64.b64encode(os.urandom(36))
return request.session['tracking_id']
def log_movie_view(request, movie):
t_id = tracking_id(request)
try:
v = MovieView.objects.get(tracking_id=t_id, movie=movie)
v.save()
except MovieView.DoesNotExist:
v = MovieView()
v.movie = movie
v.ip_address = request.META.get('REMOTE_ADDR')
v.tracking_id = t_id
v.user = None
if request.user.is_authenticated():
v.user = request.user
v.save()
Ci-dessus est plutôt un truc de base. Mon views.py
dans mon movies
application utilise l'tracking.py fichier ici:
filmlibrary/movies/views.py
@login_required
def movie_details(request, slug, template_name="movies/movie_detail.html"):
movie = get_object_or_404(Movie, slug=slug)
movie.tracking_id = tracking.tracking_id(request)
movie.save()
tracking.log_movie_view(request, movie)
context = RequestContext(request, {'movie': movie })
if movie:
try:
screener = movie.moviemedia_set.get(movie_type='screener')
.... continued
Mise à JOUR:
Voici le contenu de filmlibrary/tracking/models.py
from django.db import models
from django.contrib.auth.models import User
from movies.models import Movie
class PageView(models.Model):
class Meta:
abstract = True
date = models.DateTimeField(auto_now=True)
ip_address = models.IPAddressField()
user = models.ForeignKey(User, null=True)
tracking_id = models.CharField(max_length=50, default='')
class MovieView(PageView):
movie = models.ForeignKey(Movie)
L'erreur semble venir de la ligne d'importation from tracking.models import MovieView
dans le tracking.py fichier et je ne suis pas sûr pourquoi. Dès que j'en commentaire que la ligne de l'erreur disparaît, mais alors bien sûr, je vais avoir de nouvelles erreurs à propos de MovieView n'existant pas comme prévu. Je ne vois rien de mal à cela la ligne d'importation dans tracking.py.
Quelqu'un aurait-il des suggestions quant à pourquoi je reçois cette erreur et comment je peux résoudre ce problème?
- Est-il un
models.py
fichier dans letracking
application? - David, il y a... je vais mettre à jour la question avec son contenu
- On dirait que vous avez besoin de vérifier vos PYTHON_PATH
- Django fonctionne différents que les scripts Python - ils mettre en place le chemin pour avoir accès à toutes les applications installées.
- Django n'est pas de la magie. Comment êtes-vous envoking cela, quand vous voyez l'erreur? L'importation de travailler à partir de
./manage.py shell
? - Aaron, bien sûr, sinon la totalité de l'app allait se briser, cette importation et de nombreux autres importations sont utilisés tout au long du projet. C'est une nouvelle application que nous avons ajouté aujourd'hui et je ne peux pas comprendre pourquoi ce qui se passe dans un fichier unique.
- Est-il un
__init__.py
fichier dans letracking
application? - Amit, oui, il y est, je viens de triple vérifié. -rw-r--r-- 1 jeff personnel 0 6 Nov-11:33 tracking/__init__.py je suis perplexe...
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous essayer
à partir de modèles d'importation MovieView
au lieu de
de suivi.importation de modèles MovieView
La raison d'être à la fois models.py et tracking.py sont dans le même dossier app "de suivi", vous n'avez pas besoin d'écrire de suivi.les modèles, cela fera Django pense que vous avez un dossier nommé les modèles dans le répertoire de suivi.
Si c'est une bonne solution dans certains cas, cette erreur peut aussi être causée par le nom de l'application conflits avec construit dans les applications.
Je sais que notre équipe a rencontré cette erreur et c'était à cause de la véritable nom de l'application. C'est aussi important de noter, parce que vous ne serez pas en mesure de tirer dans les modèles à d'autres applications si c'est le cas.
Si le deuxième exemple ne fonctionne pas dans votre projet Django vous utilisez peut-être un conflit avec un autre nom de l'application. De bons exemples de inutilisable construit dans les applications incluent (mais ne sont pas limités à) des "tests", et "admin".
Je mets en garde contre une bandaid fixer et d'enquêter sur le nom de votre appli près.