【问题标题】:How do I display the number of object returned from a query如何显示从查询返回的对象数
【发布时间】:2016-01-16 00:40:04
【问题描述】:

我想显示从查询搜索返回的对象数。我试过了

 {{ p.count }} and {{ Post.count }}

这是我的 post_list.html。我已经阅读了使用这些方法的其他帖子,但它们对我不起作用。我知道我错过了一些东西。

   {% extends 'posts/base.html' %}

    {% block content %}



    <div class="col-sm-6 col-sm-offset-3">
        <h1>{{ title }}</h1>

        <form method="get" action=" ">
            <input type="text" name="q" placeholder="search" value="{{ request.GET.q }}"/>
            <input type="submit" value=" search"/>
        </form>

        <a href="{% url 'posts:create'  %}">create</a>
    {% for p in queryset %}

        <div class="row">
                  <div class="col-sm-12 "> <!-- i like col-sm-6 -->
                    <div class="thumbnail">
                        {% if p.image %}
                        <img src='{{ p.image.url }}' class="img-responsive" />
                        {% endif %}
                      <!--<img src="..." alt="...">-->
                      <div class="caption">
                          {% if p.draft %} <h3>Staff Only: Draft</h3> {%  if p.publish > today %}<h3>Staff Only: Future Post</h3>  {% endif  %}
                          {% endif %}
                        <h3><a href='{{ p.get_absolute_url}}'>{{p.title}}</a> <small>{{p.publish | timesince }} </small> </h3>
                          {% if p.user.get_full_name %}<p>Author: {{  p.user.get_full_name  }}</p>{% endif %}
                        <p>{{p.content | truncatechars:30}}</p>
                        <p><a href="{{ p.get_absolute_url}}" class="btn btn-primary" role="button">View</a>

                            {% if user.is_authenticated %}
                            <a href='{% url "posts:update" p.slug %}' class="btn btn-default" role="button">edit</a>
                            <a href='{% url "posts:delete" p.id %}' class="btn btn-danger" role="button">delete</a>
                            {% endif %}

                        </p>

                      </div>
                    </div>
                  </div>
            <hr>
        </div>

    {% endfor %}

        <div class="pagination">
        <span class="step-links">
            {% if queryset.has_previous %}
                <a href="?{{ page_request_var }}={{ queryset.previous_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">previous</a>
            {% endif %}

            <span class="current">
                Page {{ queryset.number }} of {{ queryset.paginator.num_pages }}.
            </span>

            {% if queryset.has_next %}
                <a href="?{{ page_request_var }}={{ queryset.next_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a>
            {% endif %}
        </span>
    </div>

    </div>
    {% endblock content %}

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: django


    【解决方案1】:

    您不能对单个对象 p 执行 count,因为没有计算在内。只有查询集有count 方法,所以这样做:

    {{ queryset.count }}
    

    【讨论】:

    • 这不起作用。上面发布的答案确实如此,但不是我想要的。我正在使用分页。所以 {{ query|length }} 只返回分页第一页上对象的最大数量,而不是所有对象的总数
    • 那么您的queryset 并不是真正的查询集,而是与分页相关的对象。如果你使用{{ queryset|length }},只要你的queryset 对象是一个interable(list, tuple, dict),它就可以工作。 count 效率更高,因为它直接在查询集上调用数据库操作count(*),但length 会执行类似len(queryset) 的操作,并将评估整个查询集。 stackoverflow.com/questions/10695322/…
    【解决方案2】:

    您需要使用内置过滤器length

    返回值的长度。这适用于字符串和列表。

    您可以在模板中使用它来获取任何对象的长度

    {{ queryset|length }}
    

    【讨论】:

    • 感谢@Suever 我正在使用分页。所以 {{ query|length }} 只返回分页第一页上对象的最大数量,而不是所有对象的总数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多