如何在pythondjang中迭代数据

2024-04-29 00:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

   [{
    '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),每个记录都属于特定的用户。所以我对它进行了研究,得到了用户的mps和用户的详细信息。但是,当我试图重复它解释在下面的答案或任何其他答案,所以我每次都得到奇怪的结果。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和user,然后我想迭代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”和其他人。你知道吗


Tags: 数据用户inforobject记录mpowner
2条回答

根据你的错误,我看到的是,你试图迭代mp,它有一个字典和列表的值。由于数据类型不同,您不能只使用.items()。您需要使用.items()来获取key,value中的mp值。然后,您必须处理对列表的迭代,然后是键、值。C14L的答案展示了如何在模板中实现这一点,只是不要忘记您的数据类型!你知道吗

即-

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

item将是一个列表,然后您可以对其进行迭代以获得额外的键值对。你知道吗

另一种可能的解决方案是在模板标记过滤器中完成大部分工作。然后将过滤器应用到要过滤掉的选定变量上。你知道吗

对于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类定义的外观。你知道吗

相关问题 更多 >