2011-10-06 12 views
9

Supongo que, en general, tengo curiosidad acerca de qué operaciones están permitidas en los paréntesis de jinja2, p. Ej. lo que estoy tratando de hacer es realizar una operación sobre los datos incorporados de esta manera:Redondeo en soportes de jinja2

{{ round(255*(mileage['chevy'] - mileage['ford']))/1000 }} 

Esto arroja el error de rastreo:

UndefinedError: 'round' is undefined

Del mismo modo, cuando trato de usar 'abs' en un corchetes Bloque jinja, obtengo un error indefinido, a pesar de que ambas son funciones de lib estándar. ¿Hay alguna manera de realizar esta operación durante la representación de la plantilla, en lugar de antes de pasar los datos?

+0

En general, desea hacer cálculos en el código de su programa, no en su plantilla. No estoy seguro de lo que crees que son los corchetes de Jinja2, pero lo que no hacen es permitirle insertar el código de Python en tus plantillas. – geoffspear

Respuesta

24

El lenguaje de plantillas jinja2 es diferente del lenguaje python. En jinja2, el funcionamiento de los valores se realiza a menudo durante los filtros: {{ something | operation }}. Puede encontrar un list of filters en la documentación de jinja2.

Por ejemplo, para round, que puede hacer:

{{ 42.55|round }} 

Esto mostrará "42" en la página web. Un filtro abs existe de la misma manera.

Tenga en cuenta que estos filtros solo se pueden usar para modificar los valores antes de la visualización y se pueden usar para los cálculos. Los cálculos no se deben hacer en la plantilla de todos modos.

+1

+1. Solo para agregar a esto, los objetos y funciones disponibles se inyectan a través del [contexto] (http://jinja.pocoo.org/docs/api/#the-context) que contiene solo algunos elementos especiales por defecto. – Cameron

+0

Gracias, salté en el uso de bibliotecas de plantillas de Python pensando que era como páginas de servidores PHP o Java. Esto responde mi pregunta. – maxm

+1

"Los cálculos no se deben hacer en la plantilla de todos modos". <- Este es un consejo pobre. Tomemos, por ejemplo, una tabla de datos, donde los números deben mostrarse de diferentes maneras en múltiples columnas. – sobri