Python:使post.file.url对图像和视频文件具有唯一性



我一直在开发一个社交媒体网站,在那里你可以上传图像和视频,并关注其他用户。

我设法将上传的文件上传并显示到网站上。

我使用FileField加载图像和视频文件,但当我在模板中实现它时,它会显示两个空间,因为两者都使用相同的源url{source.file.url}}

型号.py

class Post(models.Model):
title = models.CharField(max_length=150)
file =  models.FileField(upload_to='uploads/%Y-%m-%d')

feeds.html

{% if post.file.url %}
<video class="video-context" width="500px" height="500px" controls>
<source src="{{ post.file.url }}" type="video/mp4">
</video>
{% endif %}

{% if post.file.url %}
<img class="image-context" src="{{ post.file.url }}" type="image/jpg" type="image/jpeg">
{% endif %}

这是img 上的一个srenshot空视频播放器

我尝试了if endswith形式:

{% if file.endswith .mp4 %}
<video class="video-context" width="500px" height="500px" controls>
<source src="{{ post.file.url }}" type="video/mp4">
</video>
{% endif %}
{% if file.endswith .jpg/jpeg %}
<img class="image-context" src="{{ post.file.url }}">
{% endif %}

但它没有起作用。

我怎么能只显示上传的文件呢。如何使{{post.file.url}}对图像和视频具有唯一性,从而更容易区分?

如何在仍然使用FileField的情况下区分上传类型?

Django模板过滤器"端开关";不会在文件字段中提供文件的扩展名。相反,它给出了对象的最后一个字符,所以在您的情况下,如果文件是视频类型,它将返回4;如果文件是图像,则它将返回g。

你想得到上传的扩展,不幸的是,Django模板中没有过滤器。

您需要在模型中创建一个函数,该函数将返回您的文件类型/扩展名。

型号.py

import os
class Post(models.Model):
title = models.CharField(max_length=150)
file =  models.FileField(upload_to='uploads/%Y-%m-%d')
def extension(self):
title, extension = os.path.splitext(self.file.name)
return extension

然后在您的模板中,您可以通过以下代码获得扩展。。。

{% for post in posts %}
{% if post.extension == '.mp4'%}
<video class="video-context" width="500px" height="500px" controls>
<source src="{{ post.file.url }}" type="video/mp4">
</video>
{% elif post.extension == '.jpg' or post.extension == '.jpeg' %}
<img class="image-context" src="{{ post.file.url }}">
{% endif %}
{% endfor %}

你可以在一个模型上使用各种方法来简化你的生活和项目。

最新更新