web-dev-qa-db-ja.com

Djangoテンプレート3項演算子

Djangoテンプレートで使用できる3項演算子(条件?true-value:false-value)があるかどうか疑問に思っていました。python 1つ(条件の場合は真の値、それ以外の場合は偽の値)しかし、Djangoテンプレート内でそれを使用して、いずれかの値によって指定されたHTMLを表示する方法がわかりません。任意のアイデア?

54
Anon

テンプレート内で三項演算子が必要なのはなぜですか? {% if %}および{% else %}で十分です。

または、firstofタグを試すこともできます。

{% firstof var1 var2 var3 %}

これは、True値に評価されるvar1、var2、またはvar3の最初の1つを出力します。

32
Daniel Roseman

Yesnoフィルターを使用できます。

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

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#yesno

75
jeroenp

それらがまだここで言及されていないからといって、組み込みのテンプレートタグdefaultdefault_if_noneは単純な状況で役立ちます。

default

値がFalseと評価された場合、指定されたデフォルトを使用します。それ以外の場合は、値を使用します。

例えば:

{{ value|default:"nothing" }}

値が ""(空の文字列)の場合、出力は何も行われません。

default_if_none

値がNoneの場合に限り、指定されたデフォルトを使用します。それ以外の場合は、> valueを使用します。

空の文字列が指定された場合、デフォルト値は使用されないことに注意してください。空の文字列をフォールバックしたい場合は、デフォルトのフィルターを使用してください。

例えば:

{{ value|default_if_none:"nothing" }}

値がNoneの場合、出力は文字列 "nothing"になります。

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default

18
ptim

Djangoの三項演算子をタグとして実装しました。参照 https://github.com/alexei/Django-template-extensions 使用できますなので:

{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}

または:

{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}

Pythonicではないのですが、yesnoフィルターよりも意味があることがわかりました。

5
Alexei

あなたはしません。 Django {% if %} templatetagがサポートを開始したばかりです==andなど。{% if cond %}{% else %}{% endif %}は今のところコンパクトです。

4
Oli

pythonおよび/またはトリックがうまくいくのだろうか?

condition and true_value or false_value

三項演算子のように動作します-条件がTrueに評価された場合はtrue_valueを出力し、そうでない場合はfalse_valueを出力します。

1
hwjp