возможно ли создать динамическую строку в шаблоне jinja

#ansible

#ansible

Вопрос:

Я хочу добавить строку в свою базу шаблонов jinja на основе числовых строк в моем файле. например. мой файл, имеющий 3 строки, тогда шаблон jinja должен быть таким, как показано ниже. предположим, что моя строка увеличивается в файле, тогда строка должна автоматически добавляться в шаблон jinja во время покраснения. Я беру количество из файла

 {% for item in join_out.stdout_lines %}
<tr>
{%  set row = item.split(" ") %}
<td align="center">{{ row[0] | replace('"','') }}</td>
<td align="center">{{ row[1] | replace('"','') }}</td>
<td align="center">{{ row[2] | replace('"','') }}</td>
</tr>
{% endfor %}
</table>
  

Комментарии:

1. вы должны иметь возможность выполнять итерации по row использованию for цикла после его разделения. может быть, вызвать это rows вместо этого, поскольку это несколько строк

Ответ №1:

Просто добавьте новый цикл for в set row = item.split(» «), чтобы перебирать элементы в этом списке, и вам никогда не придется использовать индекс списка.

 {% for item in join_out.stdout_lines %}
<tr>
{%  set rows = item.split(" ") %}
{% for row in rows %}
  <td align="center">{{ row | replace('"','') }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
  

Комментарии:

1. Хотя это может ответить на вопрос OPS, вам следует добавить некоторое объяснение того, что именно делает ваш код и почему он устраняет проблему.

Ответ №2:

Избавьтесь от кавычек и сначала разделите строки. Затем просто создайте таблицу. Например

 shell> cat playbook.yml
- hosts: localhost
  vars:
    join_out:
      stdout_lines:
        - '"A1" "B1"'
        - '"A2" "B2"'
  tasks:
    - set_fact:
        my_data: "{{ my_data|default([])   [item.split(' ')] }}"
      loop: "{{ join_out.stdout_lines|
                map('regex_replace', my_regex, my_replace)|
                list }}"
      vars:
        my_regex: '"'
        my_replace: ''
    - copy:
        content: |
          <table>
          {% for line in my_data %}
          <tr>
          {%  for row in line %}
          <td align="center">{{ row }}</td>
          {% endfor %}
          </tr>
          {% endfor %}
          </table>
        dest: table.html
  

дает

 shell> cat table.html
<table>
<tr>
<td align="center">A1</td>
<td align="center">B1</td>
</tr>
<tr>
<td align="center">A2</td>
<td align="center">B2</td>
</tr>
</table>