2010-05-01 19 views

Respuesta

3

La novedad de string.Formatter() significa que es probable que Django no lo admita. Escriba o encuentre una etiqueta de plantilla o filtro que la implemente.

21

En caso de que alguien está buscando el answser, así es como he resuelto el problema con una templatetag personalizado:

from django import template 

register = template.Library() 

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

Si desea controlar decimales: 'formato de retorno (valor "0,2%")' (por 2 lugares decimales) – User

7

Así es como he resuelto el problema:

from django import template 

register = template.Library() 

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

register.filter('percentage', percentage) 
1

mejor solución con la internacionalización funciona con 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

Aquí es lo que estoy usando (sólo se muestran los decimales, no flotadores, por cierto):

@register.filter 
def as_percentage_of(part, whole): 
    try: 
     return "%d%%" % (float(part)/whole * 100) 
    except (ValueError, ZeroDivisionError): 
     return "" 

utilizar de esta manera:

Monkeys constitute {{ monkeys|as_percentage_of:animals }} of all animals. 

donde si los monos es 3 y animales es 6, obtendrá:

50% 
43

Estaba buscando casi la misma pregunta y encontré la etiqueta de plantilla widthratio. En lugar de tener el porcentaje ya calculado como en su pregunta, puede usar esta etiqueta para calcular el porcentaje en la plantilla del valor original y el valor total con respecto al cual se calcula su porcentaje. Se hace el trabajo si sólo se necesita un porcentaje de un entero sin precisión:

{% widthratio value total_value 100 %} 

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

+1

+1 para usar la biblioteca estándar – ashwoods

+8

Solo para copiar y pegar. {% widthratio float_value 1 100%} – ErDmKo

Cuestiones relacionadas