Nota: Esto es específico frasco!
Sé que esta publicación es bastante antigua, pero hay mejores métodos para hacerlo en las versiones más nuevas de Flask utilizando procesadores de contexto.
Las variables pueden ser fácilmente creados:
@app.context_processor
def example():
return dict(myexample='This is an example')
Lo anterior puede ser utilizado en una plantilla Jinja2 con el frasco así:
{{ myexample }}
(que emite This is an example
)
Además de las funciones completas:
@app.context_processor
def utility_processor():
def format_price(amount, currency=u'€'):
return u'{0:.2f}{1}'.format(amount, currency)
return dict(format_price=format_price)
Lo anterior cuando se usa de esta manera:
{{ format_price(0.33) }}
(que emite el precio de entrada con el símbolo de moneda)
Como alternativa, puede utilizar jinja filters, al horno en el frasco. P.ej.utilizando decoradores:
@app.template_filter('reverse')
def reverse_filter(s):
return s[::-1]
O, sin decoradores y registrar manualmente la función:
def reverse_filter(s):
return s[::-1]
app.jinja_env.filters['reverse'] = reverse_filter
filtros aplicados con los dos métodos anteriores se pueden utilizar como esto:
{% for x in mylist | reverse %}
{% endfor %}
descubrí esto también - se puede añadir un módulo usando algo como esto: 'utils.helpers importación env.globals [ 'ayudantes'] = utils.helpers' – Lee
@Lee. Sí, puede 'inyectar' espacios de nombres (módulos), funciones, instancias de clases, etc. Es útil, pero no tan flexible como otros motores de plantillas como el mako. Aún así, jinja tiene otros buenos puntos. Le agradecería si aceptara la respuesta si ayuda :) –
me funcionó mientras hacía mi proyecto de motor de aplicación (webapp2 y jinja2). gracias –