を呼び出すと、var
が定義されていないと、サイレントに失敗します。そのため、テンプレートをデバッグするのが難しくなります。この場合、djangoが例外をスローするように切り替える設定はありますか?djangoテンプレートを厳密にする
私が見つけた解決策の唯一のヒントはhttp://groups.google.com/group/google-appengine/browse_thread/thread/86a5b12ff868038dで、ひどくハッキリと聞こえます。
を呼び出すと、var
が定義されていないと、サイレントに失敗します。そのため、テンプレートをデバッグするのが難しくなります。この場合、djangoが例外をスローするように切り替える設定はありますか?djangoテンプレートを厳密にする
私が見つけた解決策の唯一のヒントはhttp://groups.google.com/group/google-appengine/browse_thread/thread/86a5b12ff868038dで、ひどくハッキリと聞こえます。
ジャンゴ< = 1.9
設定TEMPLATE_STRING_IF_INVALID = 'DEBUG WARNING: undefined template variable [%s] not found'
あなたsettings.py
インチ
https://docs.djangoproject.com/en/1.9/ref/settings/#template-string-if-invalid
ジャンゴあなたsettings.py
でstring_if_invalid = 'DEBUG WARNING: undefined template variable [%s] not found'
テンプレートオプションを設定する> = 1.10
:
は、ドキュメントを参照してください。 https://docs.djangoproject.com/en/2.0/topics/templates/#module-django.template.backends.djangoも読ん
:デザインの一部だ http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables
TEMPLATE_STRING_IF_INVALID = '%s''は、いくつかのランダムなテキストの代わりに定義されていない変数名を出力するので、より適切です。しかし、第2のリンクの警告ボックスを非常に慎重に読んでください。これは実際には、開発中の常時残しておかなければならない、一回限りのデバッグインスタンスのためのものではありません。 –
TEMPLATE_STRING_IF_INVALIDの設定は、無効な変数をテンプレートで印刷しようとするときに役立ちますが、変数がifステートメントで使用されている場合やforループのコレクションとして使用されている場合は、ヘルプが見つかりません。これらの事件を捉える方法はありますか? – Eldamir
変数が未定義の場合に例外を発生させる方法はありますか? – utapyngo
は、ドキュメントを参照してください。コンテキストに変数が存在するかどうかに基づいて、デフォルトを提供し、スイッチを切り替えることができます。また、テンプレートを非常に柔軟にすることができ、厳密な "各ビューには独自のテンプレートが必要"というアプローチではなく、テンプレートの再利用性を促進します。
これまでのところ、テンプレートは実際には「デバッグ」されていません。考え方は、可能な限り多くのロジックをの外側ののテンプレートをビューまたはモデルに配置することです。コンテキストに渡すべき変数がなぜそうでないのかを知りたい場合は、デバッグする場所があなたのビューにあります。あなたのビューが戻る前にどこかでimport pdb;pdb.set_trace()
をドロップしてください。
djangosnippetsのこのハックは、テンプレートで未定義の変数が見つかった場合に例外を発生させます。
# 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()
指定したリンクの方法1が良好です。カスタムテンプレートタグはテンプレート機能を拡張するための正当なオプションなので、 –