【问题标题】:add limit for list in for loop django template在 for 循环 django 模板中添加列表限制
【发布时间】:2018-06-13 05:40:09
【问题描述】:
我只想打印 Django 模板列表中的 10 个元素
这是我的代码
<ul>
<h3>Positive Tweets :</h3>
{% for tweet in positiveTweet %}
<li>{{ tweet.0 }}</li>
{% endfor %}
</ul>
如果 positiveTweet 列表的长度为 100,我如何打印前 10 个元素。
【问题讨论】:
标签:
python
django
python-3.x
for-loop
django-templates
【解决方案1】:
您可以使用slice 来制作:
<ul>
<h3>Positive Tweets :</h3>
{% for tweet in positiveTweet|slice:":10" %}
<li>{{ tweet.0 }}</li>
{% endfor %}
</ul>
请参阅Django Slice Docs。
【解决方案3】:
Django 的方法是在视图中的结果集上构造一个 Paginator,然后在模板中查看 Page 的属性,详细信息请参阅 the Django pagination documentation。
例如,如果我的 News 对象像这样可用:
def index(request):
news = News.objects.filter(published=True).select_related('author').prefetch_related('tags')
paginator = Paginator(news, 10)
page_obj = paginator.page(request.GET.get('page', '1'))
return render(request, 'front.html', {'news': page_obj})
在模板中,您将获得一个 Page 对象,该对象一次可容纳 10 个项目,并具有几个可以连接到 UI 分页器的有用属性。比如bootstrap pager is wired有点像这样:
{% for post in news %}
<h3>{{ post.headline }}</h3>
{{ post.body }}
{% endfor %}
<nav>
<ul class="pagination">
{% if news.has_previous %}
<li>
<a href="?page={{news.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% endif %}
{% for p in news.paginator.page_range %}
<li class="{% if news.number == p %}active{% endif %}"><a href="?page={{p}}">{{p}}</a></li>
{% endfor %}
{% if news.has_next %}
<li>
<a href="?page={{news.next_page_number}}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
</ul>
</nav>
【解决方案4】:
像这样检查循环计数器:
{% for tweet in positiveTweet %}
{% if forloop.counter < 11 %}
<!-- Do your something here -->
{% endif %}
{% endfor %}