Python3中无法向Jinja2模板传递testcases值的问题求助
无法从Jinja2模板中获取testcases值的问题解决
问题情况
我尝试用Jinja2渲染包含测试用例列表的模板,但模板中的循环区域始终为空,无法渲染出testcases里的name字段值。
Python代码
from jinja2 import Environment, FileSystemLoader testcases = [ {'name' : 'testcase1', 'value' : 'PASS'}, {'name': 'testcase2', 'value': 'FAIL'}, {'name': 'testcase3', 'value': 'FAIL'}, ] env = Environment(loader=FileSystemLoader(".")) template = env.get_template('./index.html') content = template.render(testcases) print(content)
Jinja HTML模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"> </head> <body> <p1>Hello</p1> <div> <ul> {% for i in testcases %} <li>{{ i['name'] }}</li> {% endfor %} </ul> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script> </body> </html>
实际输出
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"> </head> <body> <p1>Hello</p1> <div> <ul> </ul> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script> </body> </html>
解决方法
问题出在template.render(testcases)这一行。Jinja2的render()方法需要关键字参数来绑定模板中使用的变量名,直接传入列表无法让模板识别到testcases这个变量。
修改这一行代码为以下两种方式之一即可:
方式1:使用关键字参数
content = template.render(testcases=testcases)
方式2:传入字典
content = template.render({'testcases': testcases})
修改后,模板就能正确识别testcases变量,循环会遍历列表并渲染每个测试用例的name字段。
内容的提问来源于stack exchange,提问作者tr1via
相关产品推荐
相关产品推荐

