Je me demandais s'il y avait un opérateur ternaire (condition? True-value: false-value) qui pourrait être utilisé dans un modèle Django. Je vois qu'il y a un python one (true-value if condition else false-value) mais je ne sais pas comment l'utiliser à l'intérieur d'un modèle Django pour afficher le html donné par l'une des valeurs. Toutes les idées ?
Pourquoi auriez-vous besoin d'un opérateur ternaire dans un modèle? {% if %}
et {% else %}
sont tout ce dont vous avez besoin.
Ou vous pouvez essayer la balise firstof
:
{% firstof var1 var2 var3 %}
qui sort le premier de var1, var2 ou var3 qui donne une valeur True.
Vous pouvez utiliser le filtre yesno:
{{ value|yesno:"yeah,no,maybe" }}
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#yesno
Tout simplement parce qu'ils n'ont pas encore été mentionnés ici: les balises de modèle intégrées default
et default_if_none
peut être utile dans des circonstances simples:
default
Si la valeur est évaluée à False, utilise la valeur par défaut donnée. Sinon, utilise la valeur.
Par exemple:
{{ value|default:"nothing" }}
Si la valeur est "" (la chaîne vide), la sortie ne sera rien.
default_if_none
Si (et seulement si) la valeur est None, utilise la valeur par défaut donnée. Sinon, utilise la valeur>.
Notez que si une chaîne vide est donnée, la valeur par défaut ne sera pas utilisée. Utilisez> le filtre par défaut si vous souhaitez utiliser des chaînes vides.
Par exemple:
{{ value|default_if_none:"nothing" }}
Si la valeur est None, la sortie sera la chaîne "rien".
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default
Je viens d'implémenter l'opérateur ternaire pour Django comme une balise, voir https://github.com/alexei/Django-template-extensions Vous pouvez l'utiliser comme:
{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}
Ou:
{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}
J'ai compris que cela avait plus de sens que le filtre yesno
, même si ce n'est vraiment pas Pythonic.
Non. Le Django {% if %}
templatetag vient juste de commencer à supporter ==
, and
, etc. {% if cond %}{% else %}{% endif %}
est aussi compact que possible pour l'instant.
Je me demande si le python et/ou astuce fonctionnerait?
condition and true_value or false_value
se comporte comme l'opérateur ternaire - renvoie true_value si la condition est évaluée à True et false_value sinon.