65 votes

Modèle Django d'opérateur ternaire

Je me demandais s'il existait un opérateur ternaire (condition ? true-value : false-value) qui pourrait être utilisé dans un modèle Django. Je vois qu'il en existe un en python (true-value if condition else false-value) mais je ne sais pas comment l'utiliser dans un modèle Django pour afficher le html donné par l'une des valeurs. Une idée ?

100voto

jeroenp Points 311

Vous pouvez utiliser le filtre "yesno" :

{{ value|yesno:"yeah,no,maybe" }}

Vous pouvez en savoir plus ici

1 votes

Brillant. Merci pour la réponse. Je savais que cela existait, mais je n'arrivais pas à m'en souvenir.

10 votes

Très agréable et simple, mais lorsque je veux utiliser certaines variables, il semble que ce filtre ne soit pas applicable. Par exemple, je voudrais utiliser {{ expr_or_value | yesno : "the string", other_variable_value }}

3 votes

Ce devrait être la réponse choisie ! C'est exactement ce qui est demandé.

42voto

Daniel Roseman Points 199743

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 le firstof étiquette :

{% firstof var1 var2 var3 %}

qui produit la première des var1, var2 ou var3 qui est évaluée à une valeur True.

1 votes

Je suppose que tu as raison, je vais juste utiliser if/else. Je suis juste accro au ternaire je suppose.

15 votes

J'aimerais également voir un support ternaire.

57 votes

J'ai tendance à ne pas être d'accord avec Daniel. J'ai récemment converti un modèle django en un simple modèle javascript : {% if data_complete %}{{ data }}{% else %}{{ something_else }}{% endif %} est devenu <%= data_complete ? data : something_else %> ... le second est tellement plus compact et élégant. Ce serait bien s'il y avait un équivalent dans django.

5voto

Alexei Points 451

Je viens d'implémenter l'opérateur ternaire pour Django en tant que 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 %}

Je me suis rendu compte que cela a plus de sens que les yesno même si ce n'est pas si pythique que ça.

0 votes

Génial, merci ! Cela résout le problème de ne pas pouvoir passer des variables contextuelles à |yesno

4voto

Oli Points 65050

Tu ne le fais pas. Le Django {% if %} templatetag vient tout juste de commencer à supporter == , and etc. {% if cond %}{% else %}{% endif %} est aussi compact que possible pour le moment.

1voto

hwjp Points 3041

Je me demande si le python et/ou l'astuce fonctionneraient ?

condition and true_value or false_value

se comporte comme l'opérateur ternaire - produit une valeur vraie si la condition est évaluée à Vrai, et une valeur fausse dans le cas contraire.

1 votes

J'ai appris récemment que true_value if condition else false_value est également une syntaxe Python valide, et elle est beaucoup plus lisible -- je vérifierai si elle fonctionne dans les templates...

2 votes

C'est la première chose que j'ai essayée ; je suis surpris que ça ne fonctionne pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X