36

我创建的模板文件包含以下内容:

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

然后 Jinja2 回应说:

TemplateAssertionError: no test named 'dict'

我对 Jinja2 和 Flask 完全陌生

4

3 回答 3

52

您正在寻找mapping测试

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

但 Jinja 不是 Python,因此您无法访问所有内置函数(type并且print不存在,例如,除非您将它们添加到context。在 Flask 中,您使用context_processordecorator执行此操作)。

你实际上根本不需要print。默认情况下,所有内容都会输出(除非您在extends父模板的子模板中,在这种情况下,您可以做一些有趣的事情,例如 NULL Master 回退,因为只输出主模板中具有可用名称的块)。

于 2013-05-21T17:54:05.593 回答
11

怎么样:

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

请参阅内置测试列表以供参考。

于 2013-05-21T17:53:24.137 回答
11

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

  {% if 'RelationField' in field.__class__.__name__ %}
      <div class="col-md-1">
      Manage object
      </div>
  {% endif %}
于 2016-06-28T21:29:59.533 回答