14

django テンプレートでは、が定義され{{ var }}ていない場合、 への呼び出しは暗黙のうちに失敗します。varこれにより、テンプレートのデバッグが難しくなります。この場合、djangoが例外をスローするように切り替えることができる設定はありますか?

私がオンラインで見つけた解決策の唯一のヒントはhttp://groups.google.com/group/google-appengine/browse_thread/thread/86a5b12ff868038dであり、ひどくハックに聞こえます。

4

5 に答える 5

8

Django<=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

ジャンゴ>=1.10

string_if_invalid = 'DEBUG WARNING: undefined template variable [%s] not found'でテンプレート オプションを設定しますsettings.py

ドキュメントを参照してください: 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

于 2012-01-24T16:25:00.453 に答える
4

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()
于 2015-08-10T14:51:35.767 に答える
-2

それはデザインの一部です。コンテキストに変数が存在するかどうかに基づいて、デフォルトを指定して切り替えることができます。また、テンプレートを非常に柔軟にすることができ、厳密な「各ビューには独自のテンプレートが必要」というアプローチではなく、テンプレートの再利用性が促進されます。

さらに重要なことに、テンプレートは実際には「デバッグ」されることは想定されていません。アイデアは、できるだけ多くのロジックをテンプレートの、ビューまたはモデルに配置することです。コンテキストに渡されるはずの変数が渡されない理由を理解したい場合は、それをデバッグする場所がビューにあります。import pdb;pdb.set_trace()ビューが戻る前にどこかにドロップして、周りを探し回ってください。

于 2012-01-24T16:27:30.440 に答える