12

我是 django 的新手,并创建了一个与教程中描述的投票网站没有太大区别的应用程序。在我得到的网站上:

Exception Type: TemplateSyntaxError
Exception Value:    
Caught TypeError while rendering: 'Manager' object is not iterable
Exception Location: /usr/lib/python2.7/dist-packages/django/template/defaulttags.py in render, line 190

指向标记错误 lin 第 4 行的模板(渲染时捕获 TypeError:'Manager' 对象不可迭代):

test
2   {% if clips %}
3       <ul>
4       {% for aclip in clips %}
5           <li><a href="/annotate/{{ aclip.id }}/">{{ aclip.name }}</a></li>
6       {% endfor %}
7       </ul>
8   {% else %}
9       <p>No clips are available.</p>
10  {% endif %}

这是剪辑对象:

class Clip(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=30)
    url = models.CharField(max_length=200)

以及查看代码:

def index(request):
    #return HttpResponse("You're looking at clips.")
    mylist = []
    latest_clip_list = Clip.objects.all()#.values_list("name","id")#.order_by('-pub_date')[:5]
    print latest_clip_list
    return render_to_response('annotateVideos/index2.html', {'clips': latest_clip_list})

当我从 manage,py shell 运行这段代码时,也不例外:

In [2]: from annotateVideos import views

In [3]: f = views.index("")
[{'id': 6L, 'name': u'segment 6000'}]

In [4]: f.content
Out[4]: 'test\n\n    <ul>\n    \n        <li><a href="/annotate//"></a></li>\n    \n        </ul>\n'

有任何想法吗?我发现很难调试,因为代码似乎在 shell 上运行,但在 web 服务器上却没有。

谢谢,拉斐尔

4

1 回答 1

30

您的视图代码中有很多部分被注释掉,特别是在该行中

latest_clip_list = Clip.objects.all()#.values_list("name","id")#.order_by('-pub_date')[:5]

您收到的错误'Manager' object is not iterable, 表明模板中的 for 循环正在尝试遍历 manager Clip.objects,而不是 queryset Clip.objects.all()

仔细检查以确保您的视图实际读取

latest_clip_list = Clip.objects.all()

而且只是看起来

latest_clip_list = Clip.objects
于 2013-02-10T07:09:52.093 回答