I have a small app I'm working on where I'm trying to use Django's built in filesizeformat. Currently, the format looks like this: {{ value|filesizeformat }}
. I understand I need to define this in my view.py file but, I can't seem to figure out how to do that. I've tried to use the syntax below:
def filesizeformat(bytes):
"""
Formats the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB,
102 bytes, etc).
"""
try:
bytes = float(bytes)
except (TypeError,ValueError,UnicodeDecodeError):
return u"0 bytes"
if bytes < 1024:
return ungettext("%(size)d byte", "%(size)d bytes", bytes) % {'size': bytes}
if bytes < 1024 * 1024:
return ugettext("%.1f KB") % (bytes / 1024)
if bytes < 1024 * 1024 * 1024:
return ugettext("%.1f MB") % (bytes / (1024 * 1024))
开发者_如何学Go return ugettext("%.1f GB") % (bytes / (1024 * 1024 * 1024))
filesizeformat.is_safe = True
I've then replaced 'value' with 'bytes' in the template but, this does not seem to work. Any suggestions?
filesizeformat
is a built-in filter, you do not need to implement it yourself. You should provide the value into the template, for example:
{% for page in pages %}
<li>page.name {{page.size|filesizeformat}}</li>
{% endfor %}
Now when you render the template from the view provide a pages
argument which is a list of dicts like:
[{'name': 'page1', 'size': 10000}, {'name': 'page2', 'size': 5023034}]
And so on.
精彩评论