如何使用jinja2的功能

时间:2014-05-07 21:31:50

标签: python flask jinja2

在.py文件中,我有一个函数,在给定一个ziped文件的情况下创建一个包含信息(名称,类型,大小等)的树。 (我想创建这个ziped文件的树视图)还有另一个函数为组件名称生成<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 个答案:

答案 0 :(得分: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()调用将重用标记为for的{​​{1}}循环,以recursive函数的方式生成递归树结构。