Размер и имя файла FileField в шаблоне

Как получить размер и имя 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 МБ как 67633152 байта - я их называю wusses), тогда вас может заинтересовать filesizeformat, чтобы превратить размеры в байтах в такие вещи, как 13 KB, 4.1 MB, 102 bytes и т.д., которые вы используете в своем шаблоне следующим образом:

<div class="size">{{download.file.size|filesizeformat}}</div>