7

我不断收到错误Could not import movies.views. Error was: No module named models

这是我的回溯:

    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

我不知道为什么我有这个错误。我的代码如下...

我有一个名为 django 的应用程序tracking和另一个名为movies. 我有一个tracking.pytracking应用程序中调用的 python 文件,它包含以下代码:

电影库/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()

以上是非常基本的东西。我views.py在我的movies应用程序中使用了 tracking.py 文件:

电影库/电影/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

更新:

这是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)

该错误似乎来自from tracking.models import MovieViewtracking.py 文件中的导入行,我不知道为什么。一旦我注释掉该行,错误就会消失,但是我当然会遇到有关 MovieView 的新错误,而这并不像预期的那样存在。我认为 tracking.py 中的导入行没有任何问题。

有人对我收到该错误的原因以及如何解决此问题有任何建议吗?

4

2 回答 2

18

你能试一下吗

从模型导入 MovieView

代替

从 tracking.models 导入 MovieView

原因是models.py和tracking.py都在同一个app文件夹“tracking”中,你不需要写tracking.models,这会让Django认为你在tracking目录中有一个名为models的文件夹。

于 2012-11-06T20:41:17.670 回答
12

尽管在某些情况下这是一个很好的解决方案,但此错误也可能是由于应用程序名称与内置应用程序冲突引起的。

我知道我们的团队遇到了这个错误,这是因为实际的应用程序名称。这一点也很重要,因为如果是这种情况,您将无法将模型拉入其他应用程序。

#You cannot use this format out of scope
from models import Test

#You can use this both in and out of scope in Django
from myapp.models import Test

如果第二个示例在您的 Django 项目中不起作用,则您可能使用了冲突的应用程序名称。无法使用的内置应用程序的好例子包括(但不限于)“测试”和“管理员”。

我会告诫不要使用创可贴修复并仔细调查您的应用名称。

于 2015-05-21T19:37:29.773 回答