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

使用Django Embed Video上传视频后如何提取视频ID或URL

最优方案:在模型层新增获取视频ID的方法(推荐)

Django Embed Video 本身已经内置了视频ID提取能力,不需要自己手动做字符串替换,适配所有支持的视频平台(YouTube、Vimeo等),不会因为链接格式变化失效。
修改你的 models.py 如下:

from embed_video.fields import EmbedVideoField

class Video(models.Model):
    name = models.CharField(blank=False, max_length=100, default="", null=False, primary_key=True)
    video = EmbedVideoField()

    def __str__(self):
        return self.name
    
    # 新增获取视频ID的方法
    def get_video_id(self):
        if not self.video:
            return ""
        backend = self.video.get_backend()
        return backend.code

之后你在模板、视图里都可以直接调用这个方法拿ID:

{% for course in courses %}
<div class="name">
    <h3>{{ course.get_video_id }}</h3>
</div>
{% endfor %}

备选方案:在视图层预处理视频ID

如果你不想修改模型,也可以在视图里遍历视频列表时提前把ID处理好,再传到模板:
修改你的 views.py 如下:

def Courses(request):
    courses = Video.objects.all()
    # 预处理每个视频的ID
    for course in courses:
        if course.video:
            backend = course.video.get_backend()
            course.video_id = backend.code
        else:
            course.video_id = ""

    total_uploaded_videos = courses.count()
    context = {
        'courses': courses,
        'total_uploaded_videos': total_uploaded_videos
    }
    return render(request, 'accounts/Course.html', context)

模板里直接调用提前处理好的属性即可:

<h3>{{ course.video_id }}</h3>

之前报错的原因

Django 模板语法不支持直接在变量输出语句里做赋值操作,也不支持调用带参数的Python方法,你写的 {{url=course.video.replace("https://youtu.be/", "")}} 不符合模板语法规范,所以会触发解析错误。如果一定要在模板里处理YouTube短链接的ID,也可以用内置的cut过滤器:{{ course.video|cut:"https://youtu.be/" }},但该方法仅支持固定格式的链接,兼容性远不如前面两种方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:18:02