Jinja2 格式化模板使用字典值的字典

Posted

技术标签:

【中文标题】Jinja2 格式化模板使用字典值的字典【英文标题】:Jinja2 formatting template using the dictionary of a dictionary values 【发布时间】:2020-08-27 02:24:33 【问题描述】:

我将以下内容作为我的 jinja 模板的输入:

'run_test': 'NS': [], 'SS': [' Create'], 'pre_test': 'MS': [], 'FI': [' Create'], 'FS': [' Create', ' size=10']

这里我有一个包含 2 个键的字典: 1. 运行测试 2. 预测试

我编写了一个脚本来填充这些键的值。 每个键的值都是一个字典。该字典包含 Key2 和值作为列表。 我想在我的脚本中使用 key2 的文本生成一个导入语句。 示例: 这里的预期输出是:

from blabla import NS, SS, MS, FI, FS

注意这里 NS、SS、MS、FI 和 FS 是 key2 值。 我面临的问题也是附加逗号。在字符串的末尾我不想添加逗号。 我当前的代码是:

from blabla import % for key, val in content.items() -%
%- for obj in val -%
  %- if loop.last -%
     obj 
  %- else -%
     obj ,
   %- endif -%
   %- endfor -%
%- endfor %

它返回的输出是:

from blabla import NS
,SSMF
,FI,FS

有人可以帮我以预期的格式获得所需的输出吗?

【问题讨论】:

【参考方案1】:

这对我有用:

from blabla import % for key, val in content.items() -%
% set outer_loop = loop %
%- for obj in val -%
  %- if loop.last and outer_loop.last -%
     obj 
  %- else -%
     obj ,<span> </span>
   %- endif -%
   %- endfor -%
%- endfor %

html 中标签外的空格通常会被忽略,因此&lt;span&gt; 标签有助于在每个逗号后插入空格。您也只想在外循环的最后一次迭代中跳过内循环最后一个元素的逗号。创建变量 outer_loop 允许您这样做。

【讨论】:

它对我不起作用。我试过你的脚本,它返回了我 NS ,&lt;span&gt; &lt;/span&gt;SS,&lt;span&gt; &lt;/span&gt;MS ,&lt;span&gt; &lt;/span&gt;FI,&lt;span&gt; &lt;/span&gt;FS 。请注意,我没有在 .html 中使用这些标签,而是在 .jinja2 模板中使用它。我正在尝试在这里生成一个动态 python 脚本。 嘿,谢谢它的工作。我的字典中有 '\n',因此它产生了问题。一旦我修复它,你的代码就可以工作了。非常感谢。

以上是关于Jinja2 格式化模板使用字典值的字典的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2模板语言

如何使用 jinja2 检查字典中的列表元素?

在 jinja2 中修改字典属性

02-模板(过滤器,控制代码块)

为啥 django 模板渲染字典这么慢?

Django - 在模板中格式化/访问 Pandas.to_dict() 数据框