programing

장고 템플릿의 사전에서 사전을 통해 반복하는 방법은 무엇입니까?

starjava 2023. 7. 16. 12:25
반응형

장고 템플릿의 사전에서 사전을 통해 반복하는 방법은 무엇입니까?

내 사전은 다음과 같습니다(사전 내 사전).

{'0': {
    'chosen_unit': <Unit: Kg>,
    'cost': Decimal('10.0000'),
    'unit__name_abbrev': u'G',
    'supplier__supplier': u"Steve's Meat Locker",
    'price': Decimal('5.00'),
    'supplier__address': u'No\r\naddress here',
    'chosen_unit_amount': u'2',
    'city__name': u'Joburg, Central',
    'supplier__phone_number': u'02299944444',
    'supplier__website': None,
    'supplier__price_list': u'',
    'supplier__email': u'ss.sss@ssssss.com',
    'unit__name': u'Gram',
    'name': u'Rump Bone',
}}

지금은 제 템플릿에 정보를 표시하려고 하지만 어려움을 겪고 있습니다.템플릿에 대한 내 코드는 다음과 같습니다.

{% if landing_dict.ingredients %}
  <hr>
  {% for ingredient in landing_dict.ingredients %}
    {{ ingredient }}
  {% endfor %}
  <a href="/">Print {{ landing_dict.recipe_name }}</a>
{% else %}
  Please search for an ingredient below
{% endif %}

템플릿에 '0'만 표시됩니까?

저도 해봤어요.

{% for ingredient in landing_dict.ingredients %}
  {{ ingredient.cost }}
{% endfor %}

결과가 표시되지도 않습니다.

한 단계 더 깊이 반복해야 할 것 같아서 이렇게 해봤습니다.

{% if landing_dict.ingredients %}
  <hr>
  {% for ingredient in landing_dict.ingredients %}
    {% for field in ingredient %}
      {{ field }}
    {% endfor %}
  {% endfor %}
  <a href="/">Print {{ landing_dict.recipe_name }}</a>
{% else %}
  Please search for an ingredient below
{% endif %}

하지만 아무것도 표시되지 않습니다.

내가 뭘 잘못하고 있는 거지?

데이터가 -라고 가정해 보겠습니다.

data = {'a': [ [1, 2] ], 'b': [ [3, 4] ],'c':[ [5,6]] }

사용할 수 있습니다.data.items()사전 요소를 가져오는 방법입니다.참고, 장고 템플릿에는 넣지 않습니다.()또한 일부 사용자가 언급되었습니다.values[0]작동하지 않습니다. 그렇다면 시도해 보십시오.values.items.

<table>
    <tr>
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>

    {% for key, values in data.items %}
    <tr>
        <td>{{key}}</td>
        {% for v in values[0] %}
        <td>{{v}}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</table>

당신은 이 논리를 당신의 특정한 딕트로 확장할 수 있다고 꽤 확신합니다.


정렬된 순서로 딕트 키를 반복하려면 - 먼저 python에서 정렬한 다음 django 템플릿에서 반복하고 렌더링합니다.

return render_to_response('some_page.html', {'data': sorted(data.items())})

템플릿 파일:

{% for key, value in data %}
    <tr>
        <td> Key: {{ key }} </td> 
        <td> Value: {{ value }} </td>
    </tr>
{% endfor %}

이 답은 나에게 통하지 않았지만, 나는 스스로 답을 찾았습니다.하지만 아무도 제 질문을 올리지 않았습니다.물어보고 대답하기 귀찮아서 그냥 여기에 두겠습니다.

이는 다음 쿼리를 위한 것입니다.

data = Leaderboard.objects.filter(id=custom_user.id).values(
    'value1',
    'value2',
    'value3')

템플릿:

{% for dictionary in data %}
  {% for key, value in dictionary.items %}
    <p>{{ key }} : {{ value }}</p>
  {% endfor %}
{% endfor %}

변수를 전달하는 경우data(사전 유형) 템플릿에 대한 컨텍스트로서 코드는 다음과 같아야 합니다.

{% for key, value in data.items %}
    <p>{{ key }} : {{ value }}</p> 
{% endfor %}

저는 위의 답변들이 저를 올바른 방향으로 인도해주셔서 감사합니다.그들로부터 나는 그것을 더 잘 이해할 수 있는 본보기를 만들었습니다.저는 이 예시가 당신이 이중 사전 작업을 더 쉽게 볼 수 있도록 돕고 더 복잡한 데이터 구조를 가지고 있을 때에도 도움이 되기를 바랍니다.

보기에서.py:

    bigd = {}
    bigd['home'] = {'a':  [1, 2] , 'b':  [3, 4] ,'c': [5,6] }
    bigd['work'] = {'e':  [1, 2] , 'd':  [3, 4] ,'f': [5,6] }
    context['bigd']  = bigd

template.html에서:

{% for bigkey, bigvalue in bigd.items %}
    <b>{{ bigkey }}</b> <br>
    {% for key, value in bigvalue.items %}
        key:{{ key }} <br>
        ----values: {{ value.0}}, {{value.1 }}<br>
    {% endfor %}
    <br>
{% endfor %}

두 번째 사전의 목록은 목록의 인덱스에 의해 액세스됩니다.

브라우저의 결과는 다음과 같습니다.

enter image description here

언급URL : https://stackoverflow.com/questions/8018973/how-to-iterate-through-dictionary-in-a-dictionary-in-django-template

반응형