Я мав цю проблему десь тому. Уявіть, у вас є такий масив:
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 %}