Django - 在未请求的视图上获取ViewDoesNotExist
我刚刚完成了Django教程的第四部分,但在检查服务器时遇到了这个问题:
出现了ViewDoesNotExist的错误,意思是说在渲染时找不到视图:尝试在模块polls.views中找到results,但错误提示是:这个模块没有'results'这个属性。
还有常见的错误信息:
/usr/lib/pymodules/python2.7/django/core/urlresolvers.py中的_get_callback,行170
教程的最后一部分是要从views.py中去掉除了'vote'以外的所有请求,我以为我做对了,但显然不是。
从我能看到的代码中,并没有请求'results'这个视图,我仔细检查了好几遍代码,还是找不到问题。
urls.py:
from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
admin.autodiscover()
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
from django.conf.urls.defaults import *
from django.views.generic import DetailView, ListView
from polls.models import Poll
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='polls/index.html')),
url(r'^(?P<pk>\d+)/$',
DetailView.as_view(
model=Poll,
template_name='polls/detail.html')),
url(r'^(?P<pk>\d+)/results/$',
DetailView.as_view(
model=Poll,
template_name='polls/results.html'),
name='poll_results'),
url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
)
views.py:
from django.http import HttpResponseRedirect, HttpResponse
from polls.models import Choice, Poll
from django.shortcuts import render_to_response, get_object_or_404
from django.http import Http404
from django.template import RequestContext
from django.core.urlresolvers import reverse
def vote(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the poll voting form.
return render_to_response('polls/detail.html', {
'poll': p,
'error_message': "You didn't select a choice.",
}, context_instance=RequestContext(request))
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
models.py:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return (self.question)
class Choice (models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return (self.choice)
admin.py:
from polls.models import Poll
from polls.models import Choice
from django.contrib import admin
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('question', 'pub_date')
list_filter = ['pub_date']
date_hierarchy = 'pub_date'
search_fields = ['question']
admin.site.register(Poll, PollAdmin)
希望能得到一些帮助来找到问题所在。:)
1 个回答
0
你网址配置的最后一行提到了 polls.views.vote
。这会导致Django尝试导入 polls.views
,如果这个文件里有任何错误(根据你收到的错误信息来看,确实有),那么导入就会失败。
去看看 polls/views.py
文件,找找看“results”是在哪里被导入的。虽然你发的views.py代码里没有这样的内容,但那是完整的文件吗,还是只是其中的一部分?