2010-01-17 2 views
11

Как получить размер и имя 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 %} 

Как я могу отобразить имя и размер файла?

ответ

29

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

+1, но вы все равно расширять «Когда у вас есть g ot доступ к значению 'FileField', у вас есть значение типа' File'? Когда вы работаете с экземпляром 'FileField', как указано выше (с' download.file'), как вы волшебным образом находите себя с экземпляром 'File' вместо этого? Я вижу довольно много таких вещей с Django. Это может сбить с толку. И если бы вы могли указать на любую документацию для этого, это было бы полезно. Благодарю. –

+0

Возможно, эта ссылка [Ссылка на поле модели Django: типы полей] (http://docs.djangoproject.com/en/1.2/ref/models/fields/#field-types), в которой говорится: «Когда вы получаете доступ к файловому полю на модели, вам предоставляется экземпляр FieldFile в качестве прокси для доступа к базовому файлу ». имеет значение. Я все еще думаю, что это волшебство. –

Смежные вопросы