You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中'Videos'对象不可迭代错误的排查与解决

解决Django模板中'Videos' object is not iterable错误

问题原因

你用slice:":3"处理videos QuerySet时,这个过滤器的作用是取出QuerySet的前3个单个Videos对象,而非把QuerySet拆分成每组3个的子集合。外层循环的chunk实际是单个Videos实例,内层循环for video in chunk自然会报错——单个模型对象无法被迭代。

修复方案

方法1:在视图中提前分组(推荐)

修改views.py,将QuerySet转为列表后按每3个元素一组拆分:

from django.shortcuts import render
from .models import Videos

def index(request):
    videos = list(Videos.objects.all())
    # 按每3个视频为一组拆分列表
    video_chunks = [videos[i:i+3] for i in range(0, len(videos), 3)]
    return render(request, 'index.html', {'video_chunks': video_chunks})

然后更新模板代码,直接遍历分组后的列表:

{% for chunk in video_chunks %}
<div class="row">
    {% for video in chunk %}
    <div class="col-xs-12 col-lg-4">
        <div class="video-container">
            <iframe class="video" src="{{ video.video_id }}" allowfullscreen></iframe>
        </div>
    </div>
    {% endfor %}
</div>
{% endfor %}

方法2:使用Django内置标签(无需修改视图)

如果不想改动视图逻辑,可通过循环索引判断实现分组:

{% for video in videos %}
    {% if forloop.first or forloop.counter0|divisibleby:3 %}
    <div class="row">
    {% endif %}
        <div class="col-xs-12 col-lg-4">
            <div class="video-container">
                <iframe class="video" src="{{ video.video_id }}" allowfullscreen></iframe>
            </div>
        </div>
    {% if forloop.last or forloop.counter|divisibleby:3 %}
    </div>
    {% endif %}
{% endfor %}

这个方法通过索引判断何时开启/闭合row容器,同样能实现每行3个视频的布局。

内容的提问来源于stack exchange,提问作者Oriander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:23:24