4

コンテキスト変数 (例: 'woot') を None に設定するか、単に未定義のままにしておくと....

{% if woot %} うん!{% endif %}

あなたが期待することをします(何もしません)。しかし、そうする場合:

{% if woot == True %} うん!{% endif %}

「うん!」と出力されます。woot が None / undefined であっても。それは非常に直感的ではないようです。明らかに、これを回避できます...しかし、根本的な原因を理解したいと思います。なぜそれが起こるのか....?

証拠:

from django.template import Context, Template

x = Template("{% if woot %}Yeah!{% endif %}")
y = Template("{% if woot == True %}Yeah!{% endif %}")

x.render( Context( {} ))  # => u''
y.render( Context( {} ))  # => u'Yeah!'

x.render( Context( {'woot':None} ))  # => u''
y.render( Context( {'woot':None} ))  # => u'Yeah!'

これはDjango 1.4.3にあります

4

1 に答える 1

5

Django 1.5 (リリース ノート) では、テンプレート エンジンは を解釈しTrue、対応する Python オブジェクトとして を評価するため、に評価されます。FalseNone{% if woot == True %}False

以前のバージョンの Django では、テンプレート コンテキストに変数wootも変数も存在しませんでした。TrueNone == Noneは に評価されるTrueので、ええ! 表示されています

于 2013-02-08T10:32:25.147 に答える