使用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
相关产品推荐
相关产品推荐

