django模板过滤器是否显示百分比?

问题描述 投票:23回答:7

我想要类似string formatting from the standard library的东西。

'%'百分比。乘数100并以固定('f')显示格式,后跟一个百分号。

django formatting django-templates
7个回答
3
投票

string.Formatter()的新颖性意味着Django不太可能支持它内置。编写或找到实现它的模板标记或过滤器。


63
投票

我一直在寻找几乎相同的问题,并找到了widthratio模板标签。您可以使用此标记从模板的原始值和总值中计算出百分比,而不用像问题中那样已计算出百分比。如果您只需要没有精度的整数百分比,它就可以完成工作:

{% widthratio value total_value 100 %}

参考:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#widthratio


25
投票

如果有人在寻找答案,这就是我使用自定义templatetag解决问题的方法:

from django import template

register = template.Library()

@register.filter
def percentage(value):
    return format(value, "%")

15
投票

这是我正在使用的(顺便说一下,我们只显示小数,而不显示浮点数:]

@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%

7
投票

这是我解决问题的方式:

from django import template

register = template.Library()

def percentage(value):
    return '{0:.2%}'.format(value)

register.filter('percentage', percentage)

3
投票

具有国际化的更好的解决方案适用于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) + '%' 

0
投票

使用百分数格式的数字的最短方法,例如“ 65%”:

{{ number|stringformat:"d%%" }}
© www.soinside.com 2019 - 2024. All rights reserved.