2013-05-21 6 views
13

Die Vorlagendatei i erstellt wurde, enthält diese:Check Variablentyp innerhalb Jinja2 in Flask

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

Dann Jinja2 antwortet mit den Worten:

TemplateAssertionError: no test named 'dict' 

Ich bin völlig neu Jinja2 und Flasche

Antwort

28

Sie suchen die mapping test:

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

Jinja ist allerdings nicht Python, so dass Sie Zugriff haben nicht zu allen builtins (type und print nicht, zum Beispiel existieren, es sei denn Sie sie hinzufügen zu the context. In Flask tun Sie dies mit der context_processor decorator).

Sie brauchen eigentlich überhaupt nicht print. Standardmäßig wird alles ausgegeben (es sei denn, Sie befinden sich in einer untergeordneten Vorlage, die extends ein Elternteil ist, in diesem Fall können Sie interesting things like the NULL Master fallback tun, weil nur Blöcke mit Namen, die in der Vorlage verfügbar sind, ausgegeben werden).

5

Wie wäre es mit:

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

siehe List of Builtin Tests als Referenz.

1

Falls Sie einen benutzerdefinierten Typ erhalten Sie Feldnamen wie in diesem Beispiel zugreifen können:

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