如何在Django中迭代这个列表列表?

时间:2010-11-14 15:56:33

标签: django django-templates

我有下面的字典和对象列表。

args =  {'Qtag': [
                  [<Question: Question object>, <Tags: Tags object>],
                  [<Question: Question object>, <Tags: Tags object>]
                 ]
        }

在我的views.py

args=dict(Qtag=Questag)
t=loader.get.template('main.html')
c=Context(args)

在我的main.html中,我试图以下面的方式进行迭代

{%if Qtag %}
  {% for item_list in Qtag %}
   {% for item in item_list %}
      </h4> <b> Question</b>:{{item.qid}} {{item.title}} </h4><br/>
      </h4> {{item.question}} </h4>
      <button name="tag" type="submit" value="tagname"> {{item.tagname}} </button>
   {% endfor %}
  {% endfor %}
{% endif %}

当我在main.html中尝试上述方法时,我会在屏幕上显示4次。这里,由Question对象列表和标签对象列表组成的第一个列表对应于单个问题,对于另一个问题类似,因此在屏幕中我只希望显示两个问题及其对应的标签。我无法正确迭代以获得我需要的东西。关于如何实现这一点的任何想法!!!

感谢。

1 个答案:

答案 0 :(得分:2)

我不确定代码中args=dict(Qtag=Questag)的含义(因为我不知道Questag是什么)。我不知道你的标签是否也是可迭代的(我假设是这样)。您的HTML看起来也很不正确(例如,我看不到开头h4)。

这就是我要做的事情,以获得类似于你所寻找的东西。你可以解决这个问题。

{% if Qtag %}
   {% for question, tags in Qtag %}
     {# First put in the question header #}
     <h4>Question : {{question.qid}} {{question.title}} </h4>
     {# Then the question body #}
     <p>
     {{question.question}}
     </p>
     {# Now a tag list #}
     <ul>
     {% for tag in tags %}
       <li> 
          <button name = "tag" type="submit" value="{{tag.name}}"> 
            {{tag.name}} 
          </button>
       </li>
     {% endfor %}      
     </ul>
   {% endfor %}
{% endif %}

你的原始解决方案是以二次方式迭代列表(你在每个外部迭代中迭代一次列表)这就是你看到被打印4次的原因。