2013-03-09 8 views
22

私はDjango以外のプロジェクトでDjangoテンプレートを使用しています。テンプレートにはコンテキストにない変数への参照が含まれていないことを確認したいContextにnon_existent_variableがない場合は、{{ non_existent_variable }}と表示されたときにエラーを発生させるために、Djangoテンプレートレンダラーが必要です。コンテキストで変数が見つからない場合にDjangoテンプレートを作成する方法

TEMPLATE_STRING_IF_INVALIDに設定して、このテンプレートがレンダリングされたテンプレートにないことを確認できますが、それはまったくエレガントではありません。

何とかあまりにも多くの作業をせずにコンテキストを上書きすると、コンテキストが欠落しているキーエラーを取り除くことはできますか?

+1

http://djangosnippets.org/snippets/646/ – catherine

+0

私はDjangoプロジェクトの外にDjangoのテンプレートエンジンを使用するための説得力のある理由が表示されません。 Djangoのテンプレートエンジンは "Webデザイナーには耐えない"ように設計されています。この動作は妥協したものの1つに過ぎません。あなたはJinja2について聞いたことがありますか? –

+0

ありがとう@キャサリン!できます。 – jbasko

答えて

20

ソリューションを提供Django Snippetがあります:

# settings.py 
class InvalidVarException(object): 
    def __mod__(self, missing): 
     try: 
      missing_str=unicode(missing) 
     except: 
      missing_str='Failed to create string representation' 
     raise Exception('Unknown template variable %r %s' % (missing, missing_str)) 
    def __contains__(self, search): 
     if search=='%s': 
      return True 
     return False 

TEMPLATE_DEBUG=True 
TEMPLATE_STRING_IF_INVALID = InvalidVarException() 
+0

であることを確認したかったのです。これは便利ですが、{%if i_do_not_exist%} 'に欠落している変数をキャッチしません。修正はありますか? – Medorator

+2

これは素晴らしいです、ありがとう。 Django 1.8以降では、代わりに 'OPTIONS ['debug']'と 'OPTIONS ['string_if_invalid']'を設定する必要があることに注意してください。 'missing_var | default:" foo "'シナリオで動作させる方法はありますか? 'default'がそれをする機会を得る前に、これが発生するようです。 –

+0

'string_if_invalid'を使ってこのソリューションをDjango 1.11で試してみましたが、サーバを実行しているときにこのエラーが出ました:'?:(templates.E002) 'string_if_invalid' in TEMPLATES OPTIONSは文字列でなければならないが、 0x7f6ea4aaabe0>(InvalidVarException)のInvalidVarExceptionオブジェクトです。 –

関連する問題