模板中的文件字段大小和名称
Posted
技术标签:
【中文标题】模板中的文件字段大小和名称【英文标题】:FileField Size and Name in Template 【发布时间】:2011-01-06 03:52:13 【问题描述】:如何获取模板中 FileField 的大小和名称?
我的模型是这样设置的:
class PDFUpload(models.Model):
user = models.ForeignKey(User, editable=False)
desc = models.CharField(max_length=255)
file = models.FileField(upload_to=upload_pdf)
我的模板是这样设置的:
% for download in downloads %
<div class="download">
<div class="title"> Name</div>
<div class="size">64.5 MB</div>
<div class="desc">download.desc</div>
</div>
% endfor %
如何显示文件名和大小?
【问题讨论】:
【参考方案1】:一旦您访问了FileField
的值,您就获得了File
类型的值,它具有以下方法:
File.name
:
包含 MEDIA_ROOT 的相对路径的文件名。
File.size
文件的大小(以字节为单位)。
因此您可以在模板中执行此操作:
% for download in downloads %
<div class="download">
<div class="title">download.file.name</div>
<div class="size">download.file.size bytes</div>
<div class="desc">download.desc</div>
</div>
% endfor %
要获得更易于阅读的文件大小(对于那些将 64.5 MB 视为 67633152 字节而感到困惑的用户,我称他们为 wusses),那么您可能对 filesizeformat
过滤器感兴趣,用于转换大小以字节为单位,转换为 13 KB
、4.1 MB
、102 bytes
等内容,您在模板中使用如下:
<div class="size">download.file.size|filesizeformat</div>
【讨论】:
+1,但是您是否愿意扩展“一旦您可以访问FileField
的值,您就获得了File
类型的值”?当使用上述FileField
的实例(使用download.file
)时,您如何神奇地发现自己使用File
的实例呢?我在 Django 中看到了很多这样的东西。这可能会令人困惑。如果您可以为此指出任何文档,那将会很有帮助。谢谢。
可能是这个链接Django Model field reference:Field types,它说“当您访问模型上的 FileField 时,您将获得一个 FieldFile 的实例作为访问基础文件的代理。”是相关的。我仍然认为它很神奇。以上是关于模板中的文件字段大小和名称的主要内容,如果未能解决你的问题,请参考以下文章