2011-09-28 8 views
25

値がNoneの場合、すべてのdjangoテンプレートタグが空の文字列を表示するように、django設定またはプログラムによる方法を探しています。例えば、私はいくつかのDjangoのテンプレートを持っていることを想像:変数がNoneの場合のデフォルトテンプレートタグ出力のDjango設定?

{{cat}} chases {{mouse}} 

猫とマウスの両方をなしていないかのように、それがレンダリングされます:私は{{cat|default:""}}かを使用して各1を設定することができることを承知しています

None chases None 

{{mouse|default_if_none:""}}

しかし、すべてのタグにデフォルトの値を設定できるようにするには、明示的にすべてのタグに|default:""を追加する必要がありません。

私はTEMPLATE_STRING_IF_INVALIDという設定も知っています。ただし、この設定は無効な文字列にのみ適用されます。いずれも有効とはみなされません。

答えて

34

このようなものはありません。そのため、defaultフィルタとdefault_if_noneフィルタが存在します。これはフィーチャーです。誤解を招くような行動に頼るのではなく、自分が何をしているのかを考えることができます。変数がNoneになる可能性がある場合は、その不測の事態を計画する必要があります。変数に常にの値がある場合は、「なし」は何かが正しくないことを示します。デフォルトで空白文字列をレンダリングするだけの場合、値が定義されていないか、実際には空文字列かはわかりません。一貫したコードを書いて、ショートカットを忘れる。

+4

「+1」が「暗黙的」よりも優れているためです。 – jathanism

+0

それは感謝します、ありがとう! – zzz

+0

Lame。 「許可よりも許してほしいと思うのは簡単ですか?」私はこれが非常にPythonicではなく、どこでもDRYの後で 'default_if_none'を書いているのではないかと恐れています!この "機能"を回避するために、 'forms.fields.CharField'が返されることは決してありません。空の文字列を格納する方が良いでしょう。DB ...ええ、確か:P-自慢して申し訳ありません、私は自分自身を助けることができませんでした。 –

4

、あなたが魔法「ヌル文字列として偽の値を持つすべてのものをレンダリング」を有効にしていたことを忘れてしまったので、物事が正しくレンダリングされないだろうというときでしょうか激怒の

考える「明示的、暗黙よりも優れています」設定します。

default_if_noneフィルタを使用している場合は、テンプレートに渡す前にキャストNone''に変更することを検討してください。

テンプレートはより簡単になり、を明示的にに設定すると、null値を文字列化することになります。

3

これはトリックを行う必要があります。例えば、初期化コードのどこかに入れてください。 wsgi.py

# Patch template Variable to output empty string for None values 
from django.template.base import Variable 
_resolve_lookup = Variable._resolve_lookup 
def new_resolve_lookup(self, *args, **kwargs): 
    o = _resolve_lookup(self, *args, **kwargs) 
    return o or u"" 
Variable._resolve_lookup = new_resolve_lookup