Если я верну шаблон Jinja2 так:
return render_response('home.htm', **context)
Как получить список переменных в контексте из шаблона?
Если я верну шаблон Jinja2 так:
return render_response('home.htm', **context)
Как получить список переменных в контексте из шаблона?
Технически, поскольку контекст не передается как именованный словарь, требуется небольшая работа для создания списка переменных контекста изнутри шаблона. Однако это возможно.
Определите функцию контекста Jinja, чтобы вернуть объект jinja2.Context, который по существу является словарем глобальных переменных/функций
Сделать эту функцию доступной в глобальном пространстве имен; то есть словарь jinja2.Environment или jinja2.Template globals
Необязательно, фильтровать объекты из контекста; например, используйте callable()
, чтобы пропустить глобальные вспомогательные функции по умолчанию Jinja (диапазон, столяр и т.д.). Это может быть сделано в контексте функции или шаблона; где это имеет смысл.
Пример:
>>> 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
[В качестве альтернативы вызовите render_response
с помощью ('home.htm', context=context)
, чтобы другое решение работало.]
Здесь, как получить @crewbum answer, используя приложение Flask:
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable