python - 如何根据上传文件的类型在 Django 模板中显示视频或图像文件?
问题描述
我正在尝试显示模型实例的外键集中的文件。该文件可以是视频或图片,由用户上传(类似于 Instagram)。如何根据上传的文件类型正确显示文件<video>
?<img>
我目前在 html 中使用<video>
or<img>
标记来显示文件,它们都可以工作,但前提是文件属于适当的类型。如果文件属于其他类型,则错误的标签将在网站上显示一个黑框。
{% if result.resultfile_set.all %}
{% for resultfile in result.resultfile_set.all %}
<video controls>
<source src="{{ resultfile.file.url }}">
</video>
<img src="{{ resultfile.file.url }}" />
<p>Caption: {{ resultfile.caption }}</p>
{% endfor %}
{% endif %}
预期结果是,如果用户上传的文件是视频文件,则显示为视频文件;或者如果文件是图像文件,则将其显示为图像。相反,我目前只能在其中一个正确显示而另一个显示为黑框时显示这两种文件类型
解决方案
我建议检查 mime 类型(链接.
假设您有一个名为 Media 的模型:
class Media(models.Model):
media = models.BinaryField(...)
def generate_html(self):
if mime_type(self.media) == "image":
return <img></img>
elif mime_type(self.media) == "video":
return <video></video>
else:
raise Exception("media type not understood")
现在您可以在模板中使用 generate_html 方法
推荐阅读
- reactjs - NextJS Router.push 不适用于某些用例
- pdf - PDF 标准是否提供了一种存储可提取(语义)文本的方法?
- java - 如何根据旁边的数字打印字符序列?
- bash - 带有#text的csv上的awk / sed
- drools - OptaPlanner:可空计划变量未按预期工作
- python - Python:用子目录重命名目录
- javascript - Discord.js 机器人的 Mass Role Assigner 命令
- php - 使用 API 调用的结果将其 POST/PUT 到另一个 API
- node.js - 续集迁移NodeJS
- r - 为具有多个正态分布的图创建图例