mon*_*gun 3 html python jinja2
我正在改变现有的Web界面来查看ROBOT doc库,它使用jinja(HTML内部的Python)和HTML的混合.我以前从未使用过jinja或HTML,并且在遇到简单的测试用例时遇到了问题.当浏览器加载文档时,我希望保留文档的项目目录结构以使查找更容易,因此我想使用jinja来创建dir结构.这是我正在使用的代码片段:
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
......之后还有更多,但这是我遇到错误的地方.它将collection_list设置为var,并且if语句可以工作,但是当它执行'do'语句时,它失败了:
TemplateSyntaxError:遇到未知标签'do'.Jinja正在寻找以下标签:'elif'或'else'或'endif'.需要关闭的最里面的块是"if".
我不相信这是一个未闭合的循环或东西,因为如果我用一个简单的测试打印语句替换do语句,它的工作原理.有谁知道我做错了什么?
从模板文档:
表达声明
如果加载了expression-statement扩展,
do则可以使用一个与常规变量expression({{ ... }})完全相同的标记.除了它不打印任何东西.这可以用来修改列表:Run Code Online (Sandbox Code Playgroud){% do navigation.append('a string') %}
您需要启用Expression语句扩展才能使其正常工作.
您没有显示如何加载Jinja2环境,但是通过类的extensions参数加载扩展:Environment()
jinja_env = Environment(extensions=['jinja2.ext.do'])
Run Code Online (Sandbox Code Playgroud)