2011-08-04 22 views
0

I出力はテンプレートに以下の場合:なぜ、このシンプルなDjangoのIF文のように動作しますか?

{{ latest_session.chat_room.is_open }} 

それは

True 

を出力しかし、私はこのチェックを行うとき:

{% if latest_session.chat_room.is_open == 'True' %} 
    Online 
{% else %} 
    Offline 
{% endif %} 

それは出力:

Offline 

Shoulそれはオンライン出力されませんか?

答えて

9

is_openはおそらくBooleanFieldあるので、そのPythonの値がブール値ではなく、文字列です。確認するには{% if latest_session.chat_room.is_open %}を使用してください。

+0

はい、あなたは正しいです、それはそれを解決します。奇妙なことにもかかわらず、自動生成されたドキュメントは、それがブール値であるとは言いませんでしたが、他のフィールドではそうでした。 – Sammy

+0

しかし、あなたは{latest_session.chat_room.is_open%があれば%}ジャンゴ1.2のよう真 – Ted

3

Trueはブール値ではなく、文字列です。代わりに{% if latest_session.chat_room.is_open %}を使用してください。 Django Bookによれば

0

{%%場合}タグは、変数を評価し、その変数が「真」である場合 (すなわち、それが存在し、空ではなく、偽ではありませんブール値){%場合%}、 システムは、間のすべてが表示され、{%ENDIF%}。

したがって、{%if%}タグ内での比較はできません。 is_openはおそらくブール値を返すので、しかし、代わりに以下を使用します。

{% if latest_session.chat_room.is_open %} 
+1

ない真と評価され、それはその後、「偽」とテキストフィールドである場合には、テキストフィールドブール値とではありません知っていることに注意してください:[基本比較演算子が追加されました](https://docs.djangoproject.com/ja/dev/ref/templates/builtins/?from=olddocs#operator) –

+0

非常にクールです。それは知らなかった。 –

関連する問題