variable tutorial template for custom django django-templates django-file-upload

tutorial - django template tags filter



TamaƱo y nombre de FileField en plantilla (1)

¿Cómo obtengo el tamaño y el nombre de un FileField en una plantilla?

Mi modelo está configurado de esta manera:

class PDFUpload(models.Model): user = models.ForeignKey(User, editable=False) desc = models.CharField(max_length=255) file = models.FileField(upload_to=upload_pdf)

Mi plantilla está configurada así:

{% 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 %}

¿Cómo puedo mostrar el nombre y el tamaño del archivo?


Una vez que tiene acceso al valor de un FileField , tiene un valor de tipo File , que tiene los siguientes métodos:

File.name : nombre del archivo que incluye la ruta relativa desde MEDIA_ROOT.

File.size El tamaño del archivo en bytes.

Entonces puedes hacer esto en tu plantilla:

{% 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 %}

Para obtener un tamaño de archivo más humano (para aquellos usuarios que se verían confundidos al ver 64.5 MB como 67633152 bytes, los llamo wusses), entonces podría estar interesado en el filtro de formato de filesizeformat , para convertir tamaños en bytes en cosas como 13 KB , 4.1 MB , 102 bytes , etc., que utilizas en tu plantilla como esta:

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