Шаблон форматирования Jinja2 с использованием словаря значений словаря

У меня есть приведенный ниже контент в качестве входных данных для моего шаблона jinja:

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

Здесь у меня есть словарь, который содержит 2 ключа:
1. run_test
2. pre_test

Я написал скрипт, в котором хочу заполнить значения этих ключей. Значение каждого ключа является словарем. Этот словарь содержит 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

Может кто-нибудь, пожалуйста, помогите мне получить желаемый результат в ожидаемом формате.


person Abhijit    schedule 11.05.2020    source источник


Ответы (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 обычно игнорируются, поэтому теги <span> помогают вставлять пробелы после каждой запятой. Вы также хотите пропустить запятую только в последнем элементе внутреннего цикла в последней итерации внешнего цикла. Создание переменной external_loop позволяет вам это сделать.

person Matvei    schedule 11.05.2020
comment
Это не сработало для меня. Я попробовал ваш скрипт, и он вернул мне ‹br› NS ,<span> </span>SS,<span> </span>MS ,<span> </span>FI,<span> </span>FS . Обратите внимание: я не использую эти теги в .html, вместо этого я использую их в шаблоне .jinja2. Я пытаюсь создать динамический скрипт Python здесь. - person Abhijit; 11.05.2020
comment
Эй, спасибо, это сработало. У меня в словаре было "\n", из-за чего возникала проблема. Как только я это исправил, ваш код заработал. Большое спасибо. - person Abhijit; 12.05.2020