如何使用 jinja2 从矩阵中打印格式化的多个值?
How can I print formatted multiple values from a matrix using jinja2?
我一直在尝试使用 jinja2 创建模板,但我无法以格式化的方式从矩阵中打印多个值。我的意思是,假设我有以下矩阵:
test = [[1, 0, 0],
[0, 1, 0]]
我想做的是将这些值打印到这样的文件中:
1.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
0.0000000000000000E+00 1.0000000000000000E+00 0.0000000000000000E+00
我试过以下方法:
{% for row in test -%}
{% for i in zip(*[iter(row)]*3) -%}
{{ '{:>25.16E}{:>25.16E}{:>25.16E}'.format(*i) }}
{% endfor -%}
{% endfor -%}
但这会引发以下错误:
jinja2.exceptions.UndefinedError: 'iter' is undefined
显然我不能将 iter() 与 jinja2 一起使用。关于如何实现它的任何想法?
Jinja2 默认不支持 iter() 或 zip() 函数。但是,您可以配置 flask jinja 环境以使用这些功能(只要您使用的是 flask):
app = Flask(__name__)
app.jinja_env.globals.update(zip=zip, iter=iter)
一旦你做到了,你就会变成金子。如果您没有使用 flask,请查看您使用的框架的文档以了解如何配置 jinja 环境。
您也可以直接更新jinja2环境。但请确保使用环境变量加载模板:
import jinja2
env = jinja2.Environment()
env.globals.update(zip=zip, iter=iter)
虽然@CodeLikeBeaker 正确指出了将 iter
添加到 Jinja 环境的方法,但更简单的做法是将 row
拼写成 .format
而无需嵌套循环(因为内循环无论如何都是一个条目):
{% for row in test -%}
{{ '{:>25.16E}{:>25.16E}{:>25.16E}'.format(*row) }}
{% endfor -%}
我一直在尝试使用 jinja2 创建模板,但我无法以格式化的方式从矩阵中打印多个值。我的意思是,假设我有以下矩阵:
test = [[1, 0, 0],
[0, 1, 0]]
我想做的是将这些值打印到这样的文件中:
1.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
0.0000000000000000E+00 1.0000000000000000E+00 0.0000000000000000E+00
我试过以下方法:
{% for row in test -%}
{% for i in zip(*[iter(row)]*3) -%}
{{ '{:>25.16E}{:>25.16E}{:>25.16E}'.format(*i) }}
{% endfor -%}
{% endfor -%}
但这会引发以下错误:
jinja2.exceptions.UndefinedError: 'iter' is undefined
显然我不能将 iter() 与 jinja2 一起使用。关于如何实现它的任何想法?
Jinja2 默认不支持 iter() 或 zip() 函数。但是,您可以配置 flask jinja 环境以使用这些功能(只要您使用的是 flask):
app = Flask(__name__)
app.jinja_env.globals.update(zip=zip, iter=iter)
一旦你做到了,你就会变成金子。如果您没有使用 flask,请查看您使用的框架的文档以了解如何配置 jinja 环境。
您也可以直接更新jinja2环境。但请确保使用环境变量加载模板:
import jinja2
env = jinja2.Environment()
env.globals.update(zip=zip, iter=iter)
虽然@CodeLikeBeaker 正确指出了将 iter
添加到 Jinja 环境的方法,但更简单的做法是将 row
拼写成 .format
而无需嵌套循环(因为内循环无论如何都是一个条目):
{% for row in test -%}
{{ '{:>25.16E}{:>25.16E}{:>25.16E}'.format(*row) }}
{% endfor -%}