如果上下文中缺少变量,如何使Django模板引发错误

jba*_*sko 24 django templates

我在非Django项目中使用Django模板,我想确保我的模板不包含对不在上下文中的变量的引用,为此我需要Django模板渲染器在看到{{ non_existent_variable }}没有的时候引发错误non_existent_variable在上下文中.

TEMPLATE_STRING_IF_INVALID 可以设置为某个东西然后我们可以检查这个东西不在渲染模板中,但这根本不优雅.

我可以以某种方式在没有太多工作的情况下覆盖Context吞下丢失密钥错误的方式吗?

cat*_*ine 20

有一个Django的片段,其提供了一种解决方案:

# 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()
Run Code Online (Sandbox Code Playgroud)

  • 这很好,谢谢.请注意,在Django 1.8+中,您需要设置`OPTIONS ['debug']`和`OPTIONS ['string_if_invalid']`.但是有没有办法使它在`missing_var |默认:"foo"`场景?看来这种情况在"默认"有机会做到这一点之前就会提升. (2认同)
  • 我在 Django 1.11 中尝试了这个解决方案,使用 `string_if_invalid`,运行服务器时出现这个错误:`?: (templates.E002) 'string_if_invalid' in TEMPLATES OPTIONS must be a string but got: <config.settings.InvalidVarException 0x7f6ea4aaabe0> 处的对象(InvalidVarException)。` (2认同)