簡體   English   中英

如何在python-django中迭代數據

[英]How to iterate Data in python-django

我有以下數據:

   [{
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ],
    'user': [ < User: mpowner mpowner > ]
}, {
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ],
    'user': [ < User: kvermaOwner Owner > ]
}]

我想在我的Django模板中進行迭代。 如圖所示,這是兩個記錄,每個記錄都有2個鍵(mp和user),每個記錄都屬於特定用戶。 因此,我對它有所了解,以便獲得用戶的MP和用戶的詳細信息。 但是,當我嘗試按照下面的答案或任何其他答案中所述進行迭代時,每次得到奇怪的結果。 mp可以包含更多條記錄,但是我只停留在第一次迭代中。 我對python非常陌生,這是我工作的第三天。 任何指導都會挽救我的生活。

一旦我在下面申請:

{% for contributor in contributors.details %}

    {{ contributor }}

{% endfor %}

我得到了分解結構的輸出:

  {
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ],
    'user': [ < User: mpowner mpowner > ]
} {
    'mp': [ < MpbMealPlan: MpbMealPlan object > , < MpbMealPlan: MpbMealPlan object > ],
    'user': [ < User: kvermaOwner Owner > ]
}

一個查詢:是否有可能從我的數據中獲得預期的結果。 我想對其進行迭代以獲取mp和用戶,然后對mp進行迭代以獲取其中的多個記錄。 正如每次嘗試迭代到任何級別時,我都會獲得所有記錄,因此鍵“ mp和user”不能解決我的目的。

我不想在這里浪費任何時間。 我已經更新了問題。 到目前為止,感謝您的回答。 更新:

以下是我使用的方法並獲得了預期的結果:

 {% for contributor in contributors.details %}

    {% for user in contributor.user %}
        {{ user }}
        <br>

        {% for mp in contributor.mp %}

            {{ mp.mp_name }}
            <br>
        {% endfor %}


    {% endfor %}

{% endfor %}

結果:

user:mpowner mpowner
mp:Fresh & Healthy
mp:evening snacks
user:kvermaOwner Owner
mp:Fresh & Healthy
mp:Energizing 

最后,我在C14L的幫助下獲得了理想的輸出(驚人的指導)。 多虧了“ ajabdelaziz”和其他人。

對於Python3,調用.items()會為您提供項目。

for key, item in data.items():

對於Python2,請使用iteritems()

for k, v in knights.iteritems():

在Django模板中:

<div>
  {% for k,v in test.items %}
  <p>{{ k }} --> {{ v }}</p>
  {% endfor %}
</div>

文件: https//docs.python.org/3/tutorial/datastructures.html#looping-techniques

編輯:

要添加答案,請查看您的特定對象

[('details', [{
    'mp': u '[{"fields": {"status": 

看這部分:'mp': u' [{“ fields”:{“ st

不是 list() ,而是一個字符串: u''

當您循環一個字符串時,您將得到字符串包含的單個字符,一個接一個。 因此,“奇怪”的結果。

編輯2:

contributor.mpcontributor.user都包含列表

{% for contributor in contributors.details %}
    {{ contributor.mp }}
    {{ contributor.user }}
{% endfor %}

因此,例如打印所有用戶名,您可以

{% for contributor in contributors.details %}
    {% for user in contributor.user %}
        {{ user.username }}
    {% endfor %}
{% endfor %}

要打印mp項目列表,您可以執行

{% for contributor in contributors.details %}
    {% for mp in contributor.mp %}
        {{ mp }}
    {% endfor %}
{% endfor %}

但是每個mp對象可能都有許多屬性。 您需要查詢您的MpbMealPlan類定義。

根據您的錯誤,從我所看到的是,您正在嘗試遍歷mp,后者具有包含字典和列表的值。 由於數據類型不同,您不能僅使用.items() 您需要使用.items()來獲取mp在key,value中的值。 那么您將不得不處理遍歷列表,然后遍歷鍵值的問題。 C14L的答案顯示了如何在模板中做到這一點,只是不要忘記您的數據類型!

即-

   <div>
    {% for k,v in test.items %}
        {% for item in v%}
            {% item %}
        {% endfor %}    
    {% endfor %}
   </div>

item將是您可以迭代以獲取其他鍵值對的列表。

另一種可能的解決方案是在模板標簽過濾器中執行大多數操作。 然后將過濾器應用於要過濾掉的所選變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM