我想要类似string formatting from the standard library的东西。
'%'百分比。乘数100并以固定('f')显示格式,后跟一个百分号。
string.Formatter()
的新颖性意味着Django不太可能支持它内置。编写或找到实现它的模板标记或过滤器。
我一直在寻找几乎相同的问题,并找到了widthratio模板标签。您可以使用此标记从模板的原始值和总值中计算出百分比,而不用像问题中那样已计算出百分比。如果您只需要没有精度的整数百分比,它就可以完成工作:
{% widthratio value total_value 100 %}
参考:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#widthratio
如果有人在寻找答案,这就是我使用自定义templatetag解决问题的方法:
from django import template
register = template.Library()
@register.filter
def percentage(value):
return format(value, "%")
这是我正在使用的(顺便说一下,我们只显示小数,而不显示浮点数:]
@register.filter
def as_percentage_of(part, whole):
try:
return "%d%%" % (float(part) / whole * 100)
except (ValueError, ZeroDivisionError):
return ""
像这样使用它:
Monkeys constitute {{ monkeys|as_percentage_of:animals }} of all animals.
如果猴子是3,动物是6,您将得到:
50%
这是我解决问题的方式:
from django import template
register = template.Library()
def percentage(value):
return '{0:.2%}'.format(value)
register.filter('percentage', percentage)
具有国际化的更好的解决方案适用于python 2.5。
from django import template
register = template.Library()
from django.template.defaultfilters import floatformat
@register.filter
def percent(value):
if value is None:
return None
return floatformat(value * 100.0, 2) + '%'
使用百分数格式的数字的最短方法,例如“ 65%”:
{{ number|stringformat:"d%%" }}