web-dev-qa-db-fra.com

vérifier le type de variable à l'intérieur de Jinja2 dans Flask

Le fichier modèle que j'ai créé contient ceci:

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

Puis Jinja2 répond en disant:

TemplateAssertionError: no test named 'dict'

Je suis complètement nouveau sur Jinja2 et Flask

20
Rakib

Vous recherchez le mapping test :

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

Jinja n'est pas Python cependant, donc vous n'avez pas accès à toutes les commandes internes (type et print n'existent pas, par exemple, sauf si vous ajoutez les le contexte . Dans Flask, vous faites cela avec le context_processor décorateur ).

Vous n'avez en fait pas besoin de print du tout. Par défaut, tout est sorti (sauf si vous êtes dans un modèle enfant qui extends un parent, auquel cas vous pouvez le faire des choses intéressantes comme le NULL Master fallback parce que seuls les blocs avec des noms disponibles dans le modèle principal est sorti).

36
Sean Vieira

Que diriez-vous:

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

voir Liste des tests intégrés pour référence.

5
Tommi Komulainen

Si vous souhaitez obtenir un type personnalisé, vous pouvez accéder au nom du champ comme dans cet exemple:

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