Подтвердить что ты не робот

Как получить список текущих переменных из шаблона Jinja 2?

Если я верну шаблон Jinja2 так: return render_response('home.htm', **context)

Как получить список переменных в контексте из шаблона?

4b9b3361

Ответ 1

Технически, поскольку контекст не передается как именованный словарь, требуется небольшая работа для создания списка переменных контекста изнутри шаблона. Однако это возможно.

  • Определите функцию контекста 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), чтобы другое решение работало.]

Ответ 2

Здесь, как получить @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