【问题标题】:How to iterate Data in python-django如何在 python-django 中迭代数据
【发布时间】:2016-09-25 12:12:39
【问题描述】:

我有以下数据:

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

我想在我的 django 模板中对其进行迭代。如图所示,这是两个记录,每个记录(mp 和用户)都有 2 个键,每个记录属于特定用户。因此,我想获得用户的 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 和用户”并不能解决我的目的。

我不想在这里浪费任何人的时间。 我已经更新了这个问题。感谢您到现在为止的答案。 更新:

以下是我使用的方法并得到了预期的结果:

 {% 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”和其他人。

【问题讨论】:

  • 向我们展示您迄今为止的尝试
  • 我想重复这个问题stackoverflow.com/questions/8018973/…
  • @se0kjun 我已经尝试过这个答案,但没有任何帮助。仍然得到错误的结果。如果像我这样的人可以粘贴我应用的每个 for 循环后得到的答案。
  • 显示您在模板中尝试过的代码,不要只说“它不起作用”,我们不知道您尝试过什么

标签: python django iteration


【解决方案1】:

对于 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 类定义是什么样的。

【讨论】:

  • 我想做这个是django模板。它也可以在模板中使用吗?
  • 再次感谢。我认为 'mp' 之前的 'u' 是因为我使用 serializers.serialize("json",model.getUserById(contributor_id)) 来获取 'mp' 的数据。我已经更新了我的问题。你真的很有帮助,谢谢!
  • 你现在差不多了。只需要查看MpbMealPlan 对象的结构。 User 对象可能是标准的 Django User,所以上面有 usernamefirst_name 等。我会补充我的答案。
  • 我知道它们的结构,一旦开始一次获取单个对象,我就会得到它们。我想先从一条记录中获取 mps 和用户,然后从第二条记录中获取似乎用我的结构是不可能的,顺便说一句,谢谢,节省了我很多时间。
【解决方案2】:

从我看到的基于您的错误来看,您正在尝试迭代 mp ,它具有包含字典和列表的值。由于数据类型不同,您不能只使用.items()。您需要使用.items() 来获取 mp 在 key,value 中的值。那么你将不得不再次处理迭代列表,然后是键值。 C14L 的答案显示了如何在模板中做到这一点,只是不要忘记您的数据类型!

即 -

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

item 将是您可以迭代以获取其他键值对的列表。

另一个可能的解决方案是在模板标签过滤器中完成大部分操作。然后只需将过滤器应用于您希望它过滤掉的选定变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2011-12-14
    • 2011-02-05
    相关资源
    最近更新 更多