Django 传递响应上下文为 None

2 投票
1 回答
865 浏览
提问于 2025-04-17 23:18

在我的浏览器里,一切都很好。直到我进行测试的时候

这是我的 polls/views.py 文件

from django.shortcuts import render
from polls.models import Poll

def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')
    context = {'latest_poll_list':latest_poll_list}
    return render(request,'polls/index.html',context)

还有我的 polls/templates/polls/index.html 文件

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li>{{poll.question}}</li>
    {% endfor %}
    </ul>
{% else %}
    <p>No Poll Available</p>
{% endif %}

以及我的 polls/tests.py 文件

from django.test import TestCase
from django.core.urlresolvers import reverse

class SimpleTest(TestCase):
    def test_this(self):
        response = self.client.get(reverse('polls.views.index'))
        print response.context
        print response.content

正如你所看到的,我的 response.context['latest_poll_list'] 总是 []

所以我在想,我哪里出错了呢?

1 个回答

2

如果在浏览器中你能看到你的对象,这说明你的视图是正常的。如果你的测试没有返回任何对象,可能是因为你需要先创建这些对象(测试会自动使用一个空的数据库,这个数据库是Django从头创建的)。我通常会在setUp()方法中创建一些示例对象:

class SimpleTest(TestCase):

    def setUp(self):
        self.poll = Poll.objects.create()

撰写回答