0
votes

Jinja2 si ignore la valeur booléenne

J'ai un modèle Jinja2 où une variable qui se résout sous forme de faux booléen est ignorée dans un {% si%} code> instruction.

Le morceau pertinent du modèle ressemble à p >

    def __init__(self):
        self.can_manage_techniques = False


3 commentaires

Que se passe-t-il si vous essayez de montrer le `user.can_manage_techniques`?


Si je le fais comme {{user.can_manage_techniques}} jinja2 le remplit avec "False" (sans les citations)


Je ne peux pas reproduire de mon côté ...


3 Réponses :


0
votes

Je pense que cela pourrait être comment vous définissez true code> et false code>, dans Python, ceux-ci doivent être un type booléen (vous pouvez tester avec type (test) code>). Ceux-ci ne devraient pas être des cordes ou autre chose. La raison pour laquelle il retourne toujours vrai pourrait être parce que les chaînes non emptheres évaluent à vrai (par exemple, bool ('faux') code> est true code>, tandis que BOOL ('') / code> est false code>).

template.render(test=False)
template.render(test=True)


1 commentaires

Je peux vérifier que le type (état () ["utilisateur"]. CAN_MANAGE_Techniques) est un BOOL. J'ai également ajouté manuellement can_manage_techniques = false et changé pour être juste si CAN_MANAGE_Techniques (et if_CAN_MANAGE_Techniques == true) et dans les deux cas, toujours montré le bloc



3
votes

Je ne peux pas reproduire votre problème sur local avec une application minimale ci-dessous: xxx

imo, l'utilisation est correcte, vous devrez peut-être vérifier plus de code associé. < P> J'ai trouvé pourquoi cela s'est passé après avoir vérifié votre code sur GitHub. Ce problème provoqué par le comportement de héritage de modèle: dans un modèle enfant, le contenu en dehors du bloc sera ignoré .

Étant donné que votre modèle est un modèle enfant, vous devez donc mettre les déclarations si elles sont nécessaires. dans le bloc.


1 commentaires

Code associé: Je pense que cela a quelque chose à voir avec le modèle et le bloc. Trouvé un correctif par ma réponse.



2
votes

Si le {% si%} est en dehors du bloc - il est ignoré. Si c'est à l'intérieur du bloc, cela réussit. Je ne sais pas pourquoi - mais c'était la solution: xxx


1 commentaires

Toute la validation comprenant la solution est disponible sur Github.com/lkingsford/guitartechtree/commit/...