避免在Django模板中进行第二次迭代

避免在Django模板中进行第二次迭代,django,django-templates,Django,Django Templates,我在视图中创建了一个查询集。我需要对其中一个字段做些什么(确切地说,将其解析到字典中)。因此,我迭代查询集进行解析。然后,我获取我的新对象(不管它是什么),并将其传递给模板。然后,模板必须遍历对象。。。本质上是相同信息的2次迭代 以下是我的视图代码: t = Transaction.objects.values() for r in t: r['data'] = dict([z.split(':',1) for z in r['data'].split('|')]) …当然,我会将新的

我在视图中创建了一个查询集。我需要对其中一个字段做些什么(确切地说,将其解析到字典中)。因此,我迭代查询集进行解析。然后,我获取我的新对象(不管它是什么),并将其传递给模板。然后,模板必须遍历对象。。。本质上是相同信息的2次迭代

以下是我的视图代码:

t = Transaction.objects.values()
for r in t:
    r['data'] = dict([z.split(':',1) for z in r['data'].split('|')])
…当然,我会将新的和改进的“t”传递给模板,在模板中会发生如下情况:

{% for r in t %}
    <tr>
    <td>{{ r.username }}</td><td>{{ r.source }}</td><td>{{ r.trans }}</td><td>{{ r.transtime }}</td>
    <td>
    {% for k,v in r.data.items %}
        {{ k }}: {{v}}<br>
    {% endfor %}
    </td>
    </tr>
{% endfor %}
{t%中r的%
{{r.username}{{r.source}{{r.trans}}{{r.transtime}}
{r.data.items%中k,v的百分比}
{{k}}:{{v}}
{%endfor%} {%endfor%}
在旧的意大利面条规则时代,这不会是一个问题。我只是在数据中循环,对于每条记录,我会解析出来并显示我需要的内容


所以我的问题是:在django世界中,我如何避免在数据中循环两次?这在Python世界中是“OK”还是有更好的方法?谢谢

在同一个iterable中循环两次并不一定“错”。有时,这可能是必要的,如果没有示例代码,就无法判断它是否正确

重要的是它实际上并没有查询数据库两次。Django缓存QuerySet,但您与它交互的方式有时会导致额外的查询。不过,如果没有示例代码,我也不能说您对此是否有问题


更新您所做的没有错,如果查询集上需要额外的处理,正确的位置是在视图中。在模板中循环使用新的和改进的版本不是问题,数据库也不会受到冗余查询的影响。我说,别担心那么多;)

如果没有一个更具体的例子来说明你在做什么,你很难真正理解你需要什么,但一般来说,你可以通过传递queryset对象包装在生成器中的视图来解决这个问题,以便延迟处理。

如果我们能看到一些代码,帮助你会容易得多。对不起,伙计们,还没有太多的代码:-)我会编辑我的文章,当我有更多的细节谢谢!好的,代码现在在原始帖子中。谢谢你做的看起来很好。您只访问了数据库一次,除非您遇到性能问题(您不应该遇到),否则我不会为此担心。@sdolan:谢谢。只是需要有人拍拍我的肩膀,告诉我一切都会好起来的。谢谢你看。