Django HTML итерация через динамическое c имя словаря - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь создать веб-сайт, где часть веб-сайта я использую динамические c вкладки в html, где каждая вкладка будет отображать разные данные.

Теперь я пытаюсь сделать так, чтобы в views.py я создавал разные словари для разных вкладок. Итак, я создал ниже в файле views.py:

def display_rpt (request):
    alltrasfData={}
    sec = Section.objects.all()
    for key in sec:
        transactions = Transaction.objects.values('feast_year__title','feast_year','feast_group__title','section','section__short').filter(section_id=key.id).order_by('section','-feast_year','-feast_group__title').annotate(Total_income=Sum('income_amt'),Total_Expenditure=Sum('expenditure_amt'))
        subtotal = Transaction.objects.values('section','feast_year','feast_year__title').filter(section_id=key.id).annotate(Total_income=Sum('income_amt'),Total_Expenditure=Sum('expenditure_amt'))
        grandtotal = Transaction.objects.values('section').filter(section_id=key.id).annotate(Total_income=Sum('income_amt'),Total_Expenditure=Sum('expenditure_amt'))
        alltrasfData[f'transactions_{key.id}']=transactions
        alltrasfData[f'subtotal_{key.id}']=subtotal
        alltrasfData[f'grandtotal_{key.id}'] = grandtotal
    alltrasfData['sec']=sec
    return render(request, 'homepage/reports.html',alltrasfData)

Просто чтобы дать вам представление о некоторых словарях, которые есть в alltrasfData:

'Transactions_1', ' Transactions_2 ',' Transactions_3 '

Есть ли способ в Django html, где я могу перебирать эти разные словари с помощью динамического c имени словаря.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Вы можете легко перебирать dict в шаблонах, используя for тег шаблона.

{% for key, values in alltrasfData.items %}
    {% if 'transaction' in key %}
        {% for transaction in values %}
            <p>feast_year: {{transaction.feast_year}}</p>
            <p>...</p>
        {% endfor %}
    {% elif 'subtotal' in key %}
        # logic for subtotal goes here
        # ...
    {% else %}
         # logic for grandtotal goes here
        # ...
    {% endif %}
{% endfor %}
0 голосов
/ 14 апреля 2020

Я думаю, сохранить alltrasfData в словаре context, передать его render() и использовать следующее в HTML:

{% for key,value in alltrasfData %}
    print(key,value)
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...