Django官方教程对完全初学者完全失效!

3 投票
1 回答
3024 浏览
提问于 2025-04-15 12:32

确实不是那种级别的失败。我刚刚完成了来自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 这两个上下文变量。不过,通用视图提供的上下文变量是 objectobject_list。所以,你需要修改你的模板,以适应新的上下文变量。检查一下你的模板,把所有 latest_poll_list 的引用改成 object_list,把所有 poll 的引用改成 object

撰写回答