做声明在神社中不起作用
Do statement not working in jinja
我正在更改现有的 Web 界面以查看 ROBOT 文档库,它混合使用了 jinja(HTML 中的 Python)和 HTML。我以前从未与 jinja 或 HTML 合作过,即使是一个简单的测试用例也无法正常工作。当浏览器加载文档时,我希望保留我们项目的文档目录结构以便于查找内容,因此我想使用 jinja 来创建目录结构。这是我正在使用的代码片段:
{% extends "base.html" %}
{% block body %}
<div class="well" id="left">
<ul class="list-group list-unstyled">
{% set collection_list = [] %}
{% for collection in data.hierarchy %}
{% if collection.collection_id|string == data.collection_id|string %}
{% do collection_list.append(collection.path) %}
{% else %}
{% for link in collection.path_chain %}
<li>
<label class="tree-toggler nav-header"
title="file path: {{collection.path}}">{{link}}</label>
<ul class="list-group tree collapse"
id={{link}}>
</ul>
{% endfor %}
</li>
{% endif %}
...之后还有更多内容,但这是我遇到错误的地方。它设置 collection_list var 正常,并且 if 语句有效,但是当它去执行 'do' 语句时它失败了:
TemplateSyntaxError:遇到未知标记 'do'。 Jinja 正在寻找以下标签:'elif' 或 'else' 或 'endif'。需要关闭的最里面的块是'if'.
我不认为这是一个未闭合的循环或其他东西,因为如果我用一个简单的测试打印语句替换 do 语句,它就可以工作。有谁知道我做错了什么?
Expression Statement
If the expression-statement extension is loaded, a tag called do
is available that works exactly like the regular variable expression ({{ ... }}
); except it doesn’t print anything. This can be used to modify lists:
{% do navigation.append('a string') %}
您需要启用 Expression statement extension 才能正常工作。
您没有展示如何加载 Jinja2 环境,但加载扩展是通过 extensions
参数传递给 Environment()
class:
jinja_env = Environment(extensions=['jinja2.ext.do'])
我正在更改现有的 Web 界面以查看 ROBOT 文档库,它混合使用了 jinja(HTML 中的 Python)和 HTML。我以前从未与 jinja 或 HTML 合作过,即使是一个简单的测试用例也无法正常工作。当浏览器加载文档时,我希望保留我们项目的文档目录结构以便于查找内容,因此我想使用 jinja 来创建目录结构。这是我正在使用的代码片段:
{% extends "base.html" %}
{% block body %}
<div class="well" id="left">
<ul class="list-group list-unstyled">
{% set collection_list = [] %}
{% for collection in data.hierarchy %}
{% if collection.collection_id|string == data.collection_id|string %}
{% do collection_list.append(collection.path) %}
{% else %}
{% for link in collection.path_chain %}
<li>
<label class="tree-toggler nav-header"
title="file path: {{collection.path}}">{{link}}</label>
<ul class="list-group tree collapse"
id={{link}}>
</ul>
{% endfor %}
</li>
{% endif %}
...之后还有更多内容,但这是我遇到错误的地方。它设置 collection_list var 正常,并且 if 语句有效,但是当它去执行 'do' 语句时它失败了:
TemplateSyntaxError:遇到未知标记 'do'。 Jinja 正在寻找以下标签:'elif' 或 'else' 或 'endif'。需要关闭的最里面的块是'if'.
我不认为这是一个未闭合的循环或其他东西,因为如果我用一个简单的测试打印语句替换 do 语句,它就可以工作。有谁知道我做错了什么?
Expression Statement
If the expression-statement extension is loaded, a tag called
do
is available that works exactly like the regular variable expression ({{ ... }}
); except it doesn’t print anything. This can be used to modify lists:{% do navigation.append('a string') %}
您需要启用 Expression statement extension 才能正常工作。
您没有展示如何加载 Jinja2 环境,但加载扩展是通过 extensions
参数传递给 Environment()
class:
jinja_env = Environment(extensions=['jinja2.ext.do'])