如何在jinja2中使用函数
在一个.py文件里,我有一个函数,它可以根据一个压缩文件(zip文件)创建一个树形结构,里面包含一些信息,比如名字、类型、大小等等。(我想要把这个压缩文件的内容以树形视图展示出来。)还有另一个函数,它会生成一些HTML标签,比如<ul>
和<li>
,用来显示这些组件的名字,如果有子项的话,就会嵌套显示。这个函数不返回任何值。
我想要的是在jinja模板里有一个区域,可以显示上面那个函数生成的HTML代码。
这个函数是:
def print_tree(tree):
print "<ul>"
for t in tree:
print "<li>" + t['name']
if 'children' in t:
print_tree(t['children'])
print "</li>"
print "</ul>"
我该怎么做呢?
1 个回答
3
让你的函数 返回 一个字符串,而不是直接打印出来:
def print_tree(tree):
result = ['<ul>']
for t in tree:
result.append("<li>" + t['name'])
if 'children' in t:
result.append(print_tree(t['children']))
result.append("</li>")
result.append("</ul>")
return '\n'.join(result)
你可以直接在 Jinja 中做到这一点,而不需要用到函数:
<ul>
{%- for t in tree recursive %}
<li>{{ t.name }}
{%- if t.children -%}
<ul>{{ loop(t.children) }}</ul>
{%- endif %}</li>
{%- endfor %}
</ul>
在这里,loop()
的调用会重复使用标记为 recursive
的 for
循环,产生一个递归的树形结构,和 print_tree()
函数的效果是一样的。