Как перебрать этот словарь списков списков в Django? - PullRequest
1 голос
/ 14 ноября 2010

У меня ниже словарь со списками объектов.

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 раза на экране. Здесь первый список, состоящий из списка объекта Вопрос и списка объекта тега, соответствует одному вопросу и аналогично другому, поэтому на экране я хочу, чтобы отображались только два вопроса и соответствующие теги. Я не могу правильно выполнить итерацию, чтобы получить то, что мне нужно. Любая мысль о том, как этого добиться !!!

Спасибо.

1 Ответ

2 голосов
/ 14 ноября 2010

Я не уверен, что означает 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 раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...