在Flask中检查Jinja2中的变量类型

时间:2013-05-21 17:11:30

标签: variables types flask 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来说是全新的

3 个答案:

答案 0 :(得分:35)

您正在寻找mapping test

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

Jinja不是Python,因此您无权访问所有内置文件(typeprint,例如,除非您将它们添加到the context。在Flask中,您可以使用context_processor decorator)执行此操作。

根本不需要print。默认情况下输出所有内容(除非您在extends父项的子模板中,在这种情况下您可以执行interesting things like the NULL Master fallback,因为只输出主模板中可用名称的块。

答案 1 :(得分:5)

怎么样:

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

请参阅List of Builtin Tests以供参考。

答案 2 :(得分:5)

如果您想获得自定义类型,可以访问字段名称,如下例所示:

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