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