Механизм шаблонов Smarty имеет очень удобную встроенную {отладку} , которая дает краткий обзор переменных, доступных для дизайнера.
Было бы неплохо иметь то же самое в Jinja2 по умолчанию.
Я должен проверить, но я думаю, что это должно работать:
<h2>locals()</h2>
<pre>{{ locals() }}</pre>
<h2>globals()</h2>
@mitsuhiko из https://stackoverflow.com/a/13757358/188833 :
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
для отладки, например, pyrum_debugtoolbar может отображать контекст шаблона, если функция просмотра - соответствующим образом абстрагированная IMHO - просто возвращает объект контекста (например, dict, OrderedDict)
Мой вариант использования здесь - передача нескольких аргументов из утилиты CLI в шаблон jinja2 (где я хотел бы определить значения по умолчанию в шаблоне (например, для Dockerfiles (без autoescape
, всего))
Что я хотел бы сделать, это
{% set ENVVAR=context.get('ENVVAR', 'DEFAULT') %}
но, увы, реальный объект context
[...]
@westurner , так это работает? Я не могу проверить это прямо сейчас, но мне кажется, что {{ locals() }}
должен дать сбой, если он содержит неконвертируемые байты.
json.dumps(locals())
не будет работать без пользовательского JSONEncoder (например, с repr()
для [объектов кода])pprint.pformat(locals())
? (это было бы удобным встроенным)autoescape=True
предотвратит XSSЭто было бы благом при расширении шаблонов стороннего приложения. В настоящее время я использую hieroglyph для создания слайд-шоу, основанного на sphinx и, таким образом, Jinja2.
Я расширил тему иероглифов по умолчанию, и я хотел бы узнать, содержит ли шаблон некоторую переменную, которая сообщает мне, нахожусь ли я на слайде или нет. Может переменная есть, а может и нет. Так что в настоящее время я копаюсь в исходном коде иероглифа, чтобы найти то, что мне нужно.
Возможность просто вывести все доступные переменные прямо из шаблона (то есть без изменения какого -либо кода Python) сделала бы это намного быстрее и проще. Итак, допустим, было бы неплохо сделать что-то вроде этого:
{% extends "!layout.html %}
{# ... or any other sensible name #}
{% dump_variables() %}
{% block body %}
Hello World!
super()
Goodbye World
{% endblock %}
Таким образом, я мог проанализировать все, что предлагает мне иероглиф, при разработке новой темы.
Для этой цели я создал расширение, его можно найти по адресу https://github.com/niwinz/django-jinja/files/1607805/jinja_extensions.py.txt .
@ShaheedHaque какие-нибудь экраны?
Если вы откроете файл, в комментариях будет пример вывода. Если
нужно, я могу предоставить фактический скриншот, когда я вернусь домой сегодня вечером...
6 января 2018 г., 02:23, «анатолий техтоник» [email protected] написал:
@ShaheedHaque https://github.com/shaheedhaque есть скрины?
—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/pallets/jinja/issues/174#issuecomment-355716273 или отключить звук
нить
https://github.com/notifications/unsubscribe-auth/AEp7KdBBslHJPIGp5VliuF74bxSZTk-wks5tHtkEgaJpZM4AXefd
.
Экран @ShaheedHaque было бы неплохо сравнить с выводом Smarty из первого поста.
Как просили. Вы увидите, что содержимое организовано (и отсортировано) по контекстным переменным, фильтрам и тестам. Кроме того, вот увеличенный вид экрана с еще несколькими «интересными» переменными контекста. Посмотрите, как предела depth=3 достаточно, чтобы показать немного деталей, не подвергая себя возможности чрезмерно вложенного вывода, поскольку, я считаю, наиболее востребованной вещью является точное знание того, какие контекстные переменные (верхнего уровня) присутствуют, а не полная глубина любых конструкций:
Вы также, вероятно, увидите, что изменение/расширение деталей того, что показано, тривиально (или будет так, для тех, кто знает, как работает парсер... Я не в этом благословенном кругу :-)).
Выглядит полезно. Так почему бы не набить пиар?
Я был бы рад сделать это, учитывая некоторые указания о том, где в кодовой базе ниндзя должен жить новый код (я не знаком с этим проектом).
Я тоже, но https://github.com/pallets/jinja/blob/master/jinja2/ext.py кажется хорошим началом.
См. PR № 798.
Будет доступно как новое расширение в версии 2.11.
Спасибо!
Документация расширения отладки должна предупреждать пользователей о непреднамеренном
раскрытие конфиденциальной информации
через тег {% debug %}
и как определить, является ли расширение
включен (чтобы статический анализатор мог определить, что кто-то забыл
удалите {% debug .* %}
перед выпуском.
В пятницу, 4 октября 2019 г., Дэвид Лорд, [email protected] , написал:
Закрыто №174.
—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите ветку.
Самый полезный комментарий
Как просили. Вы увидите, что содержимое организовано (и отсортировано) по контекстным переменным, фильтрам и тестам. Кроме того, вот увеличенный вид экрана с еще несколькими «интересными» переменными контекста. Посмотрите, как предела depth=3 достаточно, чтобы показать немного деталей, не подвергая себя возможности чрезмерно вложенного вывода, поскольку, я считаю, наиболее востребованной вещью является точное знание того, какие контекстные переменные (верхнего уровня) присутствуют, а не полная глубина любых конструкций:
Вы также, вероятно, увидите, что изменение/расширение деталей того, что показано, тривиально (или будет так, для тех, кто знает, как работает парсер... Я не в этом благословенном кругу :-)).