Размер и имя FileField в шаблоне - PullRequest
12 голосов
/ 18 января 2010

Как узнать размер и имя 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 Ответ

32 голосов
/ 18 января 2010

Получив доступ к значению 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>
...