首页 > 解决方案 > 如何根据上传文件的类型在 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 %}

预期结果是,如果用户上传的文件是视频文件,则显示为视频文件;或者如果文件是图像文件,则将其显示为图像。相反,我目前只能在其中一个正确显示而另一个显示为黑框时显示这两种文件类型

标签: pythonhtmldjangodjango-templates

解决方案


我建议检查 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 方法


推荐阅读