Jinja2模板循环中如何将变量作为索引值而非字符串取值?
问题:循环中如何正确引用动态键值获取ports对应值?
场景复现
模板代码
not in loop 1={{ports['1']}} not in loop 2={{ports['2']}} {% for n in range(1, 11) %}for loop {{n}}={{ports['n']}} {# 期望此处ports['n']能变为ports['1']至ports['10'],但引号内的n被视为字符串,无法转义 #} {% endfor %}
数据源
{ "ports": { "1": "1G", "2": "2G", "3": "3G", "4": "4G", "5": "5G", "6": "6G", "7": "7G", "8": "8G", "9": "9G", "10": "10G" } }
当前渲染结果
not in loop 1=1G not in loop 2=2G for loop 1= for loop 2= for loop 3= for loop 4= for loop 5= for loop 6= for loop 7= for loop 8= for loop 9= for loop 10=
解决方案
问题核心是ports['n']里的n被当成了字符串字面量,而非循环变量。只需把数值类型的循环变量n转换成字符串,再作为键访问ports对象即可。
修改后的模板代码:
not in loop 1={{ports['1']}} not in loop 2={{ports['2']}} {% for n in range(1, 11) %}for loop {{n}}={{ports[str(n)]}} {% endfor %}
原理说明
str(n)会把循环中的数值变量n转换成字符串类型,这样ports[str(n)]就会依次对应ports['1']、ports['2']……ports['10'],精准匹配数据源中的键,从而取出对应的值。
修改后正确渲染结果
not in loop 1=1G not in loop 2=2G for loop 1=1G for loop 2=2G for loop 3=3G for loop 4=4G for loop 5=5G for loop 6=6G for loop 7=7G for loop 8=8G for loop 9=9G for loop 10=10G
内容的提问来源于stack exchange,提问作者NetworkLearner
相关产品推荐
相关产品推荐

