【问题标题】:Encountered unknown tag 'with'遇到未知标签'with'
【发布时间】:2015-10-12 16:56:05
【问题描述】:

尝试在 django 1.8 中使用 jinja2 模板时遇到以下错误“遇到未知标签 'with'”。

相同的模板在我的烧瓶应用程序上运行良好,但在尝试使用 jinja 2 的 with 功能时出现该错误。

神社模板内部

{% with %}
    {% set vartest = 42 %}
    {{ vartest }}
{% endwith %}

我的 jinja2 环境自定义内部

def environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url_for': reverse,
        'STATIC_URL': STATIC_URL
    })
    return env

【问题讨论】:

  • 你知道你使用的是哪个版本的jinja2吗? with 是 2.3 中的新功能。
  • pip show 给我名称:Jinja2 版本:2.7.3
  • 看来withan extension,在创建Environment之前尝试添加options.setdefault('extensions', []).append('jinja2.ext.with_')
  • 谢谢你,解决了这个问题,请作为答案提交,我会投赞成票。

标签: django python-2.7 django-templates jinja2


【解决方案1】:

with statement 是 Jinja 2.3 版中新增的;如果您有更早的版本,请使用pip install --upgrade Jinja2 获取最新版本。

它也是an extension,因此您必须将它包含在Environment 中,例如通过添加:

options.setdefault('extensions', []).append('jinja2.ext.with_')

【讨论】:

  • 您是否还可以添加一个注释,您也可以将其放入您的设置文件中,我敢打赌大多数人可能会使用它。感谢您对此提供的帮助。
  • @Moylin 我不知道它的语法;为什么不将其添加为单独的答案?
  • 只是好奇,该功能是否记录在某处,我什至没有看到在哪里传递扩展配置。
  • 如果 Jinja 文档在 with 语句被记录的地方引用了这个,那就太好了......谢谢。
【解决方案2】:

这也可以在您的设置文件中进行配置。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            'your/django/templates',
        ],
        'APP_DIRS': True,
    },
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [
            'your/jinja2/templates.',
        ],
        'OPTIONS':{
            'environment': 'app.project.jinja2.environment',
            'extensions': ['jinja2.ext.with_']}
    }
]

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 2016-06-15
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多