模板中的文件字段大小和名称

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 KB4.1 MB102 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 的实例作为访问基础文件的代理。”是相关的。我仍然认为它很神奇。

以上是关于模板中的文件字段大小和名称的主要内容,如果未能解决你的问题,请参考以下文章

Django 基于类的视图中的字段派生模板名称

Qt 中如何改变Label大小

通过模板实现PDF文件生成和导出

如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id

使用 django 模板呈现可变数量的文本字段/输入对

ElasticSearch之动态映射和模板