Jinja2 列表未定义



在Jinja2中,我想打印字典中"第一个"值的长度。在 Python 中,这将使用命令 len(list(my_dict.values())[0]) 完成。

当我在Jinja2中尝试此操作时,我收到错误jinja2.exceptions.UndefinedError: 'list' is undefined

最小工作示例:

from jinja2 import Template, DebugUndefined
from shutil import copyfile

def main(file_name_template, file_name_log):
    # Copy template file 'file_name_template' to 'file_name_log' so that logging can start.
    copyfile(file_name_template, file_name_log)
    template = Template(open(file_name_log).read(), undefined=DebugUndefined)
    # Define test variable 'my_dict'.
    my_dict = {'key_0': 4641896,
               'key_1': 189478415,
               'key_2': 841653}
    # Start logging.
    template_render_dict = {'my_dict': my_dict}
    # Save log to external file and possibly open upon completion of the 'main' program.
    template_rendered = template.render(template_render_dict)  # Render the template to the filled in log report.

if __name__ == "__main__":
    main("template.html", "template_rendered.html")

与 in template.html代码

<!DOCTYPE html>
<html lang="en">
    <body>
        {{my_dict}}<br/>
        {{my_dict.keys()}}<br/>
        {{my_dict.values()}}<br/>
        {{len(list(my_dict.values())[0])}}<br/>
    </body>
</html>

我该如何解决这个问题?

你不能在 jinja2 模板中使用 Python list,因为它不是 Python,它是一种标记语言。但是,它提供了一种length方法。而不是:

{% if len(dict.values()[0]) > 1 %}

你应该写:

{% if dict.values()[0] | length > 1 %}
# or
{% if dict.values() | first | length > 1 %}

有关更多示例,请参阅文档。

最新更新