2010-05-01 2 views

ответ

3

Новинка string.Formatter() означает, что Django вряд ли поддержит его. Либо напишите, либо найдите тег шаблона или фильтр, который его реализует.

21

В случае, если кто-то ищет answser, это то, как я решил проблему с помощью пользовательского templatetag:

from django import template 

register = template.Library() 

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

Если вы хотите контролировать знаков после запятой: 'формат возврата (значение,«0,2%»)' (для 2 десятичных знака) – User

7

Это, как я решил проблему:

from django import template 

register = template.Library() 

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

register.filter('percentage', percentage) 
1

Лучшее решение с интернационализация работает с 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) + '%' 
10

Вот что я использую (мы показываем только десятичные, а не плавает, кстати):

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

Я искал почти тот же вопрос и нашел widthratio тег шаблона. Вместо того, чтобы иметь процент, уже рассчитанный, как в вашем вопросе, вы можете использовать этот тег для вычисления процента в шаблоне от исходного значения и общего значения, на которое рассчитывается ваш процент. Это делает работу, если вам нужно только целочисленное процент без точности:

{% widthratio value total_value 100 %} 

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

+1

+1 для использования стандартной библиотеки – ashwoods

+8

Просто для копирования пасты. {% widthratio float_value 1 100%} – ErDmKo