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

使用django-embed-video标签触发IndexError: pop from empty list问题排查

问题分析与解决方案

问题背景

Django项目中,文章(独立子页面)与视频模型通过多对多关联,直接输出视频URL列表可正常显示,但使用django-embed-video库的{% video %}标签时,始终触发IndexError: pop from empty list异常。

异常回溯(中文翻译)

异常类型:IndexError
异常信息:pop from empty list
异常位置:.../embed_video/templatetags/embed_video_tags.py, 第X行, in video

问题根源

该错误并非DTL语法问题,而是{% video %}标签的参数不符合要求,常见触发场景:

  1. 直接将多对多关联的QuerySet整体传给标签,而非单个视频对象/有效URL
  2. 视频模型未正确使用django-embed-video提供的字段,导致URL解析失败
  3. 存在空URL或格式不支持的视频链接,引发解析逻辑报错

解决步骤

1. 修正模型结构

确保视频模型使用EmbedVideoField而非普通URLField,该字段会自动处理视频平台的URL解析:

# models.py
from django.db import models
from embed_video.fields import EmbedVideoField

class Video(models.Model):
    video_url = EmbedVideoField()  # 必须使用该字段处理视频URL
    title = models.CharField(max_length=200)

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    videos = models.ManyToManyField(Video, related_name='articles')

2. 确保视图传递正确上下文

视图中需明确获取文章关联的所有视频,避免模板中延迟查询可能引发的问题:

# views.py
from django.shortcuts import get_object_or_404
from .models import Article

def article_detail(request, pk):
    article = get_object_or_404(Article, pk=pk)
    videos = article.videos.all()  # 预查询所有关联视频
    return render(request, 'article_detail.html', {'article': article, 'videos': videos})

3. 修正模板标签用法

禁止直接将多对多QuerySet传给{% video %}标签,需遍历每个视频对象,传递单个视频的EmbedVideoField字段:

<!-- article_detail.html -->
{% load embed_video_tags %}

<!-- 错误写法:直接传递QuerySet -->
{# {% video article.videos %} #}

<!-- 正确写法:遍历单个视频并渲染 -->
{% for video in article.videos.all %}
    <div class="video-box">
        {% video video.video_url '800x450' %}  <!-- 传递单个视频的video_url字段 -->
        <p>{{ video.title }}</p>
    </div>
{% empty %}
    <p>暂无关联视频</p>
{% endfor %}

4. 排查无效视频URL

若仍报错,检查是否存在空URL或不支持的视频链接:

  • 给EmbedVideoField添加blank=False约束,避免空值存入
  • 模板中增加空值判断:
{% for video in article.videos.all %}
    {% if video.video_url %}
        {% video video.video_url '800x450' %}
    {% endif %}
{% endfor %}

内容的提问来源于stack exchange,提问作者Paweł Pedryc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:20:41