Как я получаю размер и название 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 %}
Как я могу показать имя файла и размер?
После получения доступа к значению FileField
, вы получаете значение типа File
, которое имеет следующие методы:
File.name
:
Имя файла, включающее относительный путь от MEDIA_ROOT.
Размер файла
Размер файла в байтах.
Таким образом, вы можете сделать это в вашем шаблоне:
{% 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 байт - я называю их слабаками), тогда вас может заинтересовать фильтр filesizeformat
для превращения размеров в байтах в такие вещи, как 13 KB
, 4. 1 МБ
, 102 байта
и т.д., которые вы используете в своем шаблоне так:
<div class="size">{{download.file.size|filesizeformat}}</div>