Проверить тип переменной внутри Jinja2 в колбе

Созданный файл шаблона содержит следующее:

{% if type({'a':1,'b':2}) is dict %}
    print "Oh Yes!!"
{% else %}
    print "Oh No!!!"
{% endif %}

Затем Jinja2 отвечает, говоря:

TemplateAssertionError: no test named 'dict'

Я совершенно не знаком с Jinja2 и Flask

Ответ 1

Вы ищете mapping test:

{% if {'a': 1, 'b': 2} is mapping %}
    "Oh Yes!"
{% else %}
    "Oh No!"
{% endif %}

Jinja - это не Python, так что у вас нет доступа ко всем встроенным (typeи print не существует, например, если вы не добавите их в контекст. В Flask вы делаете это с помощью context_processor decorator).

На самом деле вам не нужно print. По умолчанию все выводится (если вы не находитесь в дочернем шаблоне, который extends является родителем, и в этом случае вы можете сделать интересные вещи, такие как резервное копирование NULL Master, поскольку только блоки с именами, доступными в главном шаблоне).

Ответ 3

Если вы хотите получить собственный тип, вы можете получить имя поля, как в этом примере:

  {% if 'RelationField' in field.__class__.__name__ %}
      <div class="col-md-1">
      Manage object
      </div>
  {% endif %}