Django - 以不同的方式放置for循环

时间:2017-07-03 10:11:18

标签: javascript python django for-loop

在我的井里面,我有一个左右分开的列表。我想将用户放在该列表中。我想命令它们如下:左侧列表中的第一个,右侧的第二个,左侧列表中的第三个,右侧的右侧......所以每个第二个用户都将被放置在右侧列表中。这是井的html:

<div class="well">
  <h4>Users</h4>

  <div class="row">
    <div class="col-xs-6">
        <ul class="list-unstyled">
            <li><a href="#">User1</a>
            </li>
            <li><a href="#">User3</a>
            </li>
        </ul>
    </div>

    <div class="col-xs-6">
        <ul class="list-unstyled">
            <li><a href="#">User2</a>
            </li>
            <li><a href="#">User4</a>
            </li>
        </ul>
    </div>
  </div>
</div>

现在我不能用经典的for循环来做,因为如果我按照下面的代码所示,它会多次加载整个第二个列表:

    <div class="col-xs-6">
        <ul class="list-unstyled">

            {% for user in users %}

            <li><a href="#"> {{ user }}</a>
            </li>
        </ul>
    </div>
   {% if forloop.counter|divisibleby:2 %}
    <div class="col-xs-6">
        <ul class="list-unstyled">
            <li><a href="#">{{ user }}</a>
            </li>
        </ul>
    </div>
    {% endfor %}
</div>

我可能不得不使用forloop.counter|divisibleby:3,但我不知道如何仅在第二个无序列表中加载用户,而不会为每个用户复制整个列表。也许soulution也会使用javascript? 我希望你理解我的问题:D

2 个答案:

答案 0 :(得分:0)

编辑:我想通了,经过两天的尝试,它才来找我。如果有人在处理同样的问题;我在观点中处理了它:

def index(request):
    users = User.objects.all()
    odd_users = users[::2]
    even_users = users[1::2]
    return render(request, 'index.html', {'users': users, 'odd_users': odd_users, 'even_users': even_users})

然后我只是将它加载到模板中:

<div class="col-xs-6">
        <ul class="list-unstyled">
         {% for user in odd_users %}
            <li><a href="#">{{ user }}</a>
            </li>
         {% endfor %}
        </ul>
    </div>

    <div class="col-xs-6">
        <ul class="list-unstyled">
             {% for user in even_users %}
            <li><a href="#">{{ user }}</a>
            </li>
             {% endfor %}
        </ul>
    </div>

干杯!

答案 1 :(得分:0)

为避免发送2个额外阵列,您可以采取的其他方法是以这种方式使用divisibleby

<div class="col-xs-6">
        <ul class="list-unstyled">
         {% for user in users %}
            {% if not forloop.counter|divisibleby:2 %}
                <li><a href="#">{{ user }}</a>
                </li>
            {% endif %}
         {% endfor %}
        </ul>
    </div>

    <div class="col-xs-6">
        <ul class="list-unstyled">
             {% for user in users %}
                {% if forloop.counter|divisibleby:2 %}
                  <li><a href="#">{{ user }}</a>
                  </li>
                {% endif %}
             {% endfor %}
        </ul>
    </div>