Технически, поскольку контекст не передается как именованный словарь, для создания списка переменных контекста из шаблона требуется небольшая работа. Это возможно, хотя.
Определение контекстной функции Jinja для возврата объекта jinja2.Context, который по сути является словарем глобальных переменных / функций
Сделать эту функцию доступной в глобальном пространстве имен; т.е. словарь глобальных слов jinja2.Environment или jinja2.Template
При желании фильтровать объекты из контекста; например, используйте 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)
, чтобы заставить работать другое решение.]