2016-04-11 9 views
2

私はdjangoテンプレートでデバイスのAPIをいくつか呼び出した結果を表示しようとしています。しかし、私はテンプレートに結果を渡し、私が望むようにそれらを表示する方法に問題があります。djangoテンプレートで表示するためのリスト値の組み合わせ

私は対応する3つのリストを持っています。 (プールの量が固定されていない)クエリの初期入力としてプールの リスト:最初のAPI呼び出しから取得メンバーの

pools_list = ['testpoolA', 'testpoolB'] 

リスト(各プールのメンバーのリストを取得):

members_lists = [ 
[{'address': '10.10.10.11', 'port': 1616}, 
    {'address': '10.10.10.11', 'port': 1717}, 
    {'address': '10.10.10.12', 'port': 1616}, 
    {'address': '10.10.10.12', 'port': 1717}], 
[{'address': '10.20.20.11', 'port': 1212}, 
    {'address': '10.20.20.11', 'port': 1213}, 
    {'address': '10.20.20.12', 'port': 1212}, 
    {'address': '10.20.20.12', 'port': 1213}] 
] 

第2のAPIコール(各プールから各メンバーの優先順位を取得)からのメンバーの優先順位のリスト:

members_priorites_lists = [[0, 0, 1, 1], [0, 0, 1, 1]] 

そして、私はこのように表示したいと思います:

プール名1:

  • POOL1のメンバー1のADDRES、ポート、優先順位
  • POOL1 member2のADDRES、ポート、優先順位 (...)

プール名2:

  • pool2 member1 addres、port、priority
  • pool2 member2 addres、port、priority (...)

私はこれを共有インデックス付きのループで行うことができます。 しかし、私がこれまで読んできたことは、できるだけ多くのロジックを維持するために、djangoテンプレートでは不可能です。

どうすればいいですか?私は、何らかの形でデータ構造を準備し、それをテンプレートにいくつかの異なる形式で渡す必要があると思います。しかし、私はそれを構築してテンプレートにアクセスする方法がわかりません。 これに最も効果的なアプローチは何ですか?私は本当にいくつかのアドバイスを感謝します。私はしかし、あなたはあなたのビューで次の操作を行うことができ、このレベルの複雑さと、同時に複数のリストをトラバースする簡単な方法を知っていない

答えて

0

>>> for i, members in enumerate(members_lists): 
...  for j, member in enumerate(members): 
...   member["priority"] = members_priorites_lists[i][j] 
... return render(request, "main.html", {"members": zip(pools_list, members_lists)}) 

次にテンプレートで、

{% for pool, members_list in members %} 
    Pool name: {{pool}} 
    {% for member in members_list %} 
    {{member.address}}, {{member.port}}, {{member.priority}} 
    {% endfor %} 
{% endfor %} 
+0

これは優れたヒントでした。それは私が望む結果を正確に私に与えます。ありがとうございました! – daro

関連する問題