Макрос не возвращает список в Jinja2? - PullRequest
0 голосов
/ 31 августа 2018

В моем коде Jinja2 макрос getLisCustomer() используется для получения возвращенного списка идентификаторов клиентов и определяется следующим образом:

{% macro getLisCustomer() %}
    {% set myList = [] %}
    {% if myList.append('CU001') %}{% endif %}
    {% if myList.append('CU002') %}{% endif %}
    {% if myList.append('CU003') %}{% endif %}
{{myList}}
{% endmacro %}

Однако, когда я попытался получить индивидуальный идентификатор клиента из макроса getLisCustomer(), я получил список из одного символа вместо индивидуального идентификатора клиента в списке.

{% set TotalList = getLisCustomer() %}
{% for row in TotalList %}
    <p>{{row}}</p>
{% endfor %}

Результат примерно такой [ ' C U 0 0.....

Что не так? Как я могу получить элемент списка из макроса getLisCustomer() в Jinja2?

Добавлено : я только что понял, что основная причина может заключаться в том, что мой макрос возвращает не список, а строку, похожую на список, поэтому в for-loop возвращается каждый отдельный символ вместо элемента списка , Следовательно, как мы можем преобразовать строку, подобную списку, в реальный список?

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете сделать это так же просто, как представление списка через запятую, которое вы разделяете на список при использовании:

{% macro getLisCustomer() -%}
    {% set myList = [] -%}
    {% if myList.append('CU001') %}{% endif -%}
    {% if myList.append('CU002') %}{% endif -%}
    {% if myList.append('CU003') %}{% endif -%}
{% for i in myList %}{{ i }}{% if not loop.last %},{% endif %}{% endfor -%}
{% endmacro %}

Это может быть еще более упрощено, поскольку вам не нужно создавать myList, вы можете сразу же напечатать значения.

Тогда:

{% set TotalList = getLisCustomer().split(',') -%}
{% for row in TotalList %}
    <p>{{row}}</p>
{%- endfor %}

Или, если по какой-то причине вы хотите реализовать протокол обмена данными, вы можете создать пользовательские фильтры в Python (см. Мое первое редактирование в зависимости от того, как Ansible расширяет Jinja2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...