Как получить список текущих переменных из шаблона Jinja 2? - PullRequest
23 голосов
/ 03 августа 2010

Если я возвращаю шаблон Jinja2 следующим образом: return render_response('home.htm', **context)

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

Ответы [ 2 ]

36 голосов
/ 12 августа 2010

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

  1. Определение контекстной функции Jinja для возврата объекта jinja2.Context, который по сути является словарем глобальных переменных / функций

  2. Сделать эту функцию доступной в глобальном пространстве имен; т.е. словарь глобальных слов jinja2.Environment или jinja2.Template

  3. При желании фильтровать объекты из контекста; например, используйте 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), чтобы заставить работать другое решение.]

3 голосов
/ 07 декабря 2012

Вот как получить @ crewbum ответ , работающий из приложения Flask:

import jinja2

@jinja2.contextfunction
def get_context(c):
    return c

app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...