这个Django教程的第三部分出现错误的原因是什么?

6
我在学习Django教程时遇到了一个问题,具体是在向投票应用程序添加更多视图的过程中。参考链接如下:https://docs.djangoproject.com/en/1.5/intro/tutorial03/#writing-more-views 在这个章节之前,我可以正常显示“polls/”视图。但是当我添加了三个额外的视图,使“polls/views.py”的内容看起来如下时:
def detail(request, poll_id):
    return HttpResponse("You're looking at poll %s." % poll_id)

def results(request, poll_id):
    return HttpResponse("You're looking at the results of poll %s." % poll_id)

def vote(request, poll_id):
    return HttpResponse("You're voting on poll %s." % poll_id)

然后将polls/urls.py更改为以下内容:

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)

我遇到了一个错误。另外,我的网站根目录的 ROOT_URLCONF 指向的是 mysite/urls.py,它的内容如下:
from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

我收到的错误信息如下:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/polls/34

Django Version: 1.5.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'polls')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  92.                     response = middleware_method(request)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/middleware/common.py" in process_request
  69.             if (not urlresolvers.is_valid_path(request.path_info, urlconf) and
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in is_valid_path
  551.         resolve(path, urlconf)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  440.     return get_resolver(urlconf).resolve(path)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
  319.             for pattern in self.url_patterns:
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
  347.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
  342.             self._urlconf_module = import_module(self.urlconf_name)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/matthew/djangopoll/mysite/mysite/urls.py" in <module>
  8.                        url(r'^polls/', include('polls.urls')),
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/conf/urls/__init__.py" in include
  25.         urlconf_module = import_module(urlconf_module)
File "/home/matthew/.virtualenvs/djangopoll/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)

Exception Type: SyntaxError at /polls/34
Exception Value: invalid syntax (urls.py, line 9)

此外,以下信息可能会有所帮助:
  • 使用Django 1.5
  • 使用Python 2.7.3
  • 使用Django 1.5文档
  • 使用VirtualBox
  • 使用VirtualEnv
非常感谢您的帮助!为什么我会收到这个错误?

1
你能否在Django shell中导入polls.urls - Ignacio Vazquez-Abrams
1个回答

7
看起来Python无法导入polls.urls - 这就是为什么__import__(name)失败的原因。这里的"name"将是你的模块名,即'polls.urls'。
要找出系统为什么无法导入你的polls.urls,请尝试交互式导入它。
$ python manage.py shell

 Python ... blah blah
 ...

> import polls.urls

这会失败,但是回溯信息会给你下一个线索,指出错误的位置。
祝好运!

2
这很有帮助,因为我学会了如何使用交互式Django shell...但我遇到的问题非常荒谬。你建议的回溯让我意识到,在我添加额外视图之前,我需要在第一个视图后面加上逗号。哎呀! - Matt
1
每个人都会犯错。你应该为取得进步而感到高兴! - orlenko
这也帮助我使用交互式 shell 找出 Django 有问题导入的 urls.py。我的错误同样很荒谬,只是一个简单的括号缺失。 - Austin A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接