Django官方教程对完全初学者完全失效!
确实不是那种级别的失败。我刚刚完成了来自djangoproject.com的四部分教程,我的管理应用运行得很好,我的入口网址(/polls/)也正常,唯一的问题是我收到这个HTTP响应:
没有可用的投票。
即使数据库里有一条记录。通过管理应用进入时,显示的内容是正常的。
在教程的最后,你需要把所有硬编码的视图替换成通用视图,更新你的URL配置。按照所有修改后,你的urls.py应该是这样的:
from django.conf.urls.defaults import *
from mysite.polls.models import Poll
info_dict = {
'queryset': Poll.objects.all(),
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
(r'^(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
)
使用这些通用视图后,复制粘贴我的views.py文件就没意义了,我只想提一下里面只有一个投票功能(因为Django的通用视图已经处理了所有的复杂逻辑)。我猜测urls.py文件需要一些调整,或者在某些地方出错,导致在/polls/网址上显示“没有可用的投票。”这个输出。我的poll_list.html文件看起来是这样的:
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li>{{ poll.question }}</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
它把latest_poll_list评估为假,所以执行了else块。
你能帮我一下吗?(我在StackOverflow上搜索过重复的问题,甚至在谷歌上查找这个问题,但没有找到任何相关的信息)。为什么我在访问 http://127.0.0.1:8000/polls 时会看到这个消息?
1 个回答
14
你在教程的第4部分忽略了这一段:
在之前的教程部分,模板中提供了一个上下文,其中包含了投票和
latest_poll_list
这两个上下文变量。不过,通用视图提供的上下文变量是object
和object_list
。所以,你需要修改你的模板,以适应新的上下文变量。检查一下你的模板,把所有latest_poll_list
的引用改成object_list
,把所有poll
的引用改成object
。