web-dev-qa-db-fra.com

Pourquoi ma condition de condition ne fonctionne-t-elle pas comme prévu à Jinja2 / Cherrypy?

{% if bCat2 == True %}
    <div>True</div>
{% else %}
    <div>False</div>

Retour <div>False</div> même quand bCat2 est True. Merci, andrew

17
Andrew Kloos

Pour tester une variable booléenne dans un modèle, convertissez-le en une chaîne en python.

str(bCat2)

puis comparé à une chaîne dans le gabarit

{% if bCat2 == 'True' %}
    <div>True</div>
{% else %}
    <div>False</div>
12
Andrew Kloos

Cette partie de la documentation peut vous aider:

Les constantes spéciales vraies, fausses et aucune sont effectivement minuscules. Parce que cela a provoqué une confusion dans le passé, lors de l'écriture véritable se développe à une variable non définie considérée comme fausse, les trois peuvent être écrites dans un cas de titre aussi (vrai, faux et aucun). Toutefois, pour la consistance (tous les identificateurs de Jinja sont minuscules) , vous devez utiliser les versions minuscules .

Source: http://jinja.pocoo.org/docs/templates/

Essayez ce code:

{% if bCat2 == true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}
40
Evgeni Nabokov

La bonne façon de le faire à Jinja2 est la suivante:

{% if bCat2 is sameas true %}
    <div>True</div>
{% Elif bCat2 is sameas false %}
    <div>False</div>
{% endif %}

La raison pour laquelle vous ne pouvez pas faire

{% if bCat2 == true %}

est-ce que si bcat2 == 1 ou bcat2 == 1.0, il sera également considéré comme vrai.

10
Dag Wieers

Je voudrais ajouter que si votre logique est un peu plus complexe, vous voudrez peut-être lire sur les champs.

Comme mentionné dans Documentation officielle :

À partir de la version 2.10, des cas d'utilisation plus complexes peuvent être traités à l'aide d'objets d'espace de noms qui permettent la propagation des changements entre les champs électroniques:

{% set ns = namespace(found=false) %}
{% for item in items %}
    {% if item.check_something() %}
        {% set ns.found = true %}
    {% endif %}
    * {{ item.title }}
{% endfor %}
Found item having something: {{ ns.found }}
1
Pitto