【问题标题】: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

    【讨论】:

    • 在盒子里? “在盒子里”是什么意思?
    【解决方案2】:

    同样,在第 10 次迭代后停止处理的循环:

    {% for user in users %}
    {%- if loop.index >= 10 %}{% break %}{% endif %}
    {%- endfor %}
    

    loop.index 以 1 开头,loop.index0 以 0 开头。

    详情请访问以下链接:http://jinja.pocoo.org/docs/2.10/templates/#for-loop

    【讨论】:

      【解决方案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">&laquo;</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">&raquo;</span>
            </a>
          </li>
          {% endif %}
        </ul>
      </nav>
      

      【讨论】:

        【解决方案4】:

        像这样检查循环计数器:

                  {% for tweet in positiveTweet %}
        
                       {% if forloop.counter < 11 %}
        
                        <!-- Do your something here -->
        
                       {% endif %}
        
                  {% endfor %}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-30
          • 1970-01-01
          • 2012-07-25
          • 2019-06-12
          • 2021-10-17
          • 1970-01-01
          • 2014-09-14
          相关资源
          最近更新 更多