Python 根据上传文件的类型,如何在Django模板中显示视频或图像文件?
我试图显示模型实例外键集中的文件。该文件可以是视频或图片,由用户上传,用户认为与Instagram类似。如何根据上载的文件类型将文件显示为或正确显示 我目前正在使用html中的或标记来显示文件,它们都可以工作,但前提是文件的类型合适。如果文件属于其他类型,则不正确的标记将在站点上显示一个黑框Python 根据上传文件的类型,如何在Django模板中显示视频或图像文件?,python,html,django,django-templates,Python,Html,Django,Django Templates,我试图显示模型实例外键集中的文件。该文件可以是视频或图片,由用户上传,用户认为与Instagram类似。如何根据上载的文件类型将文件显示为或正确显示 我目前正在使用html中的或标记来显示文件,它们都可以工作,但前提是文件的类型合适。如果文件属于其他类型,则不正确的标记将在站点上显示一个黑框 预期结果是,如果用户上传的文件是视频文件,则将其显示为视频文件;或者,如果文件是图像文件,则将其显示为图像。相反,我目前只能在其中一个文件正确显示,而另一个文件显示为黑盒时显示这两种文件类型。我建议检查mi
预期结果是,如果用户上传的文件是视频文件,则将其显示为视频文件;或者,如果文件是图像文件,则将其显示为图像。相反,我目前只能在其中一个文件正确显示,而另一个文件显示为黑盒时显示这两种文件类型。我建议检查mime类型 假设你有一个叫媒体的模型:
{% 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 %}
现在,您可以在模板中使用generate_html方法您可以将媒体类型与url一起发送,并使用条件呈现来显示适当的媒体
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")
别担心,如何在Django模板中显示视频或图像文件,我有答案 使用下面的代码
[{
file: {
type: "image",
url: "example.com/foo.png"
},
caption : "foo"
},
{
file: {
type: "video",
url: "example.com/bar.mp4"
},
caption : "bar"
}]
我尝试了很多方法,最后最好的解决方案是: 型号:
{% for msg in post_user %}
{% if msg.p_image_path.url|slice:"-4:" == ".mp4" %}
#use video tag
{% else %}
#use image tag
{% endif %}
{% endfor %}
在模板中,您可以访问以下类型:
from mimetypes import guess_type
class Post(models.Model):
media = models.FileField()
def media_type_html(self):
"""
guess_type returns a tuple like (type, encoding) and we want to access
the type of media file in first index of tuple
"""
type_tuple = guess_type(self.media.url, strict=True)
if (type_tuple[0]).__contains__("image"):
return "image"
elif (type_tuple[0]).__contains__("video"):
return "video"
from mimetypes import guess_type
class Post(models.Model):
media = models.FileField()
def media_type_html(self):
"""
guess_type returns a tuple like (type, encoding) and we want to access
the type of media file in first index of tuple
"""
type_tuple = guess_type(self.media.url, strict=True)
if (type_tuple[0]).__contains__("image"):
return "image"
elif (type_tuple[0]).__contains__("video"):
return "video"
{% if post.media_type_html == "image" %}
<img src="{{ post.media.url }}">
{% elif post.media_type_html == "video" %}
<video controls>
<source src="{{ post.media.url }}">
</video>
{% endif %}