¿Cómo obtener una lista de variables actuales de la plantilla Jinja 2?

Si devuelvo una plantilla de Jinja2 de la siguiente manera: return render_response('home.htm', **context)

¿Cómo puedo obtener una lista de las variables en contexto desde dentro de la plantilla?

Técnicamente, dado que el contexto no se pasa como un diccionario con nombre, se requiere un poco de trabajo para generar una lista de las variables de contexto desde dentro de una plantilla. Es posible sin embargo.

  1. Defina una función de contexto Jinja para devolver el objeto jinja2.Context, que es esencialmente un diccionario de las variables / funciones globales

  2. Haga que esa función esté disponible en el espacio de nombres global; es decir, un diccionario global jinja2.Environment o jinja2.Template

  3. Opcionalmente, filtrar objetos del contexto; por ejemplo, use callable() para omitir las funciones de ayuda global predeterminadas de Jinja (rango, unión, etc.). Esto se puede hacer en la función de contexto o la plantilla; donde sea que tenga más sentido.

Ejemplo:

 >>> import jinja2 >>> >>> @jinja2.contextfunction ... def get_context(c): ... return c ... >>> tmpl = """ ... {% for key, value in context().items() %} ... {% if not callable(value) %} ... {{ key }}:{{ value }} ... {% endif %} ... {% endfor %} ... """ >>> >>> template = jinja2.Template(tmpl) >>> template.globals['context'] = get_context >>> template.globals['callable'] = callable >>> >>> context = {'a': 1, 'b': 2, 'c': 3} >>> >>> print(template.render(**context)) a:1 c:3 b:2 

[Alternativamente, llame a render_response con ('home.htm', context=context) para que la otra solución funcione.]

A continuación se detalla cómo obtener la respuesta de @ crewbum desde una aplicación Flask:

 import jinja2 @jinja2.contextfunction def get_context(c): return c app.jinja_env.globals['context'] = get_context app.jinja_env.globals['callable'] = callable 
    Intereting Posts