У меня была эта проблема некоторое время назад. Представьте, что у вас есть такой массив:
data = {
'user': 'admin',
'password': 'admin1234',
'role': 'admin',
'group': 'root',
'profile': 'admin',
'control': 'all',
'level': 1,
'session': '#DFSFASADASD02',
'pre_oa': 'PRE-OA',
'hepa_oa': 'HEPA-OA',
'pre_ra': 'HEPA-RA',
'hepa_ra': 'HEPA-RA',
'deodor_ra': 'DEODOR-RA'
}
Итак, вы хотите показать эти данные в две строки, но удалите пароль из этого списка. Для этого разделить на 2 массива будет легко с фильтром slice
. Однако мы должны удалить пароль. По этой причине я использую этот фрагмент. Идея состоит в том, чтобы поместить все элементы меньше, чем размер элемента data
, деленный на 2. Чтобы вычислить это, мы используем фильтр length
. Теперь для получения индекса текущего элемента мы используем loop.index
. И, наконец, мы * помещаем ассоциативный элемент в левый или правый массив. Ассоциативный массив состоит из двух компонентов key
и value
. Чтобы ссылаться на ключ массива в twit, мы используем оператор ()
и используем фильтр merge
для вставки в массив, как показано здесь {% set left_list = left_list|merge({ (key): value }) %}
Это полное решение.
{% set left_list = {} %}
{% set right_list = {} %}
{% set limit = data|length // 2 %}
{% for key, value in data|cast_to_array %}
{% if key != 'password' %}
{% if loop.index <= limit %}
{% set left_list = left_list|merge({ (key): value }) %}
{% else %}
{% set right_list = right_list|merge({ (key): value }) %}
{% endif %}
{% endif %}
{% endfor %}
{% for key, value in left_list %}
<p>
<label for="{{key}}">{{key}}</label>
<input type="text" name="{{key}}" id="{{key}}" value="{{value}}"
class="text ui-widget-content ui-corner-all">
</p>
{% endfor %}