33

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

TEMPLATE_STRING_IF_INVALID可以设置为某个东西,然后我们可以检查这个东西是否不在渲染的模板中,但这一点也不优雅。

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

4

2 回答 2

25

有一个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()
于 2013-03-09T15:20:03.767 回答
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更新您的模板

于 2019-12-16T16:34:50.957 回答