2010-01-17 71 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 MB爲67633152個字節混淆 - 我給他們打電話wusses ),那麼你可能會喜歡filesizeformat過濾器,用於車削大小以字節爲單位成之類的東西13 KB4.1 MB102 bytes,等等,你在你的模板中使用這樣的:

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

+1,但你會在乎擴大「一旦你已經g無法訪問'FileField'的值,你有一個'File'類型的值?當使用上面的'FileField'實例(使用'download.file')時,你如何神奇地發現自己具有File的實例?我在Django中看到了很多這類東西。它可能會令人困惑。如果你能指出任何文件,這將是有幫助的。謝謝。 – 2011-04-05 10:36:34

+0

可能是這個鏈接[Django Model field reference:Field types](http://docs.djangoproject.com/en/1.2/ref/models/fields/#field-types),它說:「當你訪問一個FileField模型,您將獲得一個FieldFile實例作爲訪問底層文件的代理。「是相關的。但我仍然認爲這很神奇。 – 2011-04-05 10:41:45