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

时间:2013-03-09 15:02:55

标签: django templates

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

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

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

2 个答案:

答案 0 :(得分:21)

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()

答案 1 :(得分:0)

您可以轻松地将模板后端切换到jinja2来获取它。

第0步:将jinja2添加到您的Pipfile或requirements.txt

第1步: 在settings.py中,将TEMPLATES更改如下:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'APP_DIRS': True,
        'OPTIONS': {
            'undefined': jinja2.StrictUndefined
        },
    },
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        ...

步骤2 :将您的templates目录重命名为jinja2

第3步 :(可能不需要,具体取决于您在模板中使用的内容),根据https://jinja.palletsprojects.com/en/2.10.x/switching/#django

更新模板