Перебор списка нескольких словарей для отображения ключа только один раз и значения в столбцах - PullRequest
0 голосов
/ 12 апреля 2020

там я пытался показать список словарей в шаблоне Jinja. Мне нужно показать ключ только один раз, так как оба словаря имеют один и тот же ключ. Однако значение должно отображаться в другом столбце в тех же строках, что и ключ. Проблема в том, что он показывает ключ и значение в одном столбце.

Ниже - мой код.

            {%for r in result%}
            {%for keyCategory, valueCategory in r.items()%}
            <div class="jumbotron p-3" style="margin-bottom: 5px;">
                <div class="row">

                    <div class="col-lg-4">
                        <label class=" text-right">{{keyCategory}}</label>
                    </div>
                    <div class="col-lg-2">
                        <input type="text" class="form-control text-left" id="idInput{{ keyCategory }}"
                            value="{{ valueCategory }}">

                    </div>

                </div>

            </div>
            {%endfor%}
            {%endfor%}

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Я бы хотел, чтобы вы сначала предложили изменить list, а затем выполнить итерацию.

Изменить с помощью itertools.groupby: https://www.google.com/amp/s/www.geeksforgeeks.org/itertools-groupby-in-python/amp/

Ваш код должен выглядеть следующим образом:

final_result = defaultdict(list)
for d in result:
   for k, v in d.items():
      final_result[k].append(v)


       {%for r in final_result%}
            <div class="jumbotron p-3" style="margin-bottom: 5px;">
                <div class="row">

                    <div class="col-lg-4">
                        <label class=" text-right">{{r['key']}}</label>
                    </div>
                    {%for value in r.values%}
                    <div class="col-lg-2">
                        <input type="text" class="form-control text-left" id="idInput{{ value }}"
                            value="{{ value }}">

                    </div>
                  {%endfor%}
                </div>

            </div>
            {%endfor%}

Попробуйте это.

Исправьте, если он не работает.

Редактировать 1: Я думаю, что вы хотите сделать, может быть реализовано с использованием кода ниже

     {%for r in result[0].keys()%}
            {%for row in result%}
            <div class="jumbotron p-3" style="margin-bottom: 5px;">
                <div class="row">

                    <div class="col-lg-4">
                        <label class=" text-right">{{ r }}</label>
                    </div>
                    <div class="col-lg-2">
                        <input type="text" class="form-control text-left" id="idInput{{ keyCategory }}"
                            value="{{ row[r] }}">

                    </div>

                </div>

            </div>
            {%endfor%}
            {%endfor%}
0 голосов
/ 12 апреля 2020

Работает нормально после замены r.values на final_result[r] в for-loop

           {%for r in final_result.keys()%}
            <div class="jumbotron p-3" style="margin-bottom: 5px;">
                <div class="row">

                    <div class="col-lg-4">
                        <label class=" text-right">{{r}}</label>
                    </div>
                    {%for value in final_result[r]%}
                    <div class="col-lg-2">
                        <input type="text" class="form-control text-left" id="idInput{{ value }}" value="{{ value }}">

                    </div>
                    {%endfor%}
                </div>

            </div>
            {%endfor%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...