繁体   English   中英

为什么我没有从我的 Django Paginator 中得到正确的结果

[英]Why don't I get the Correct Result out of my Django Paginator

我正在尝试在此视图中创建分页页面

def all_users(request):
    users = Person.objects.all()
    pag = Paginator(users, 3)
    page_num = request.GET.get('page')
    page_obj = pag.get_page(page_num)

    context = {
        'users': users,
        'title': 'All Users',
        'page_obj': page_obj
    }
    return render(request, 'index/users.html', context)

这是 users.html :

{%extends 'index/base.html'%}
{%block content%}
<section class="all-users">
    {%for user in users%}
    <article>
        <h1 class="username">{{user.username}}</h1>
        <hr>
        <p><b>Email: </b><span class="email" class="">{{user.email}}</span></p>
        <p><b>FirstName: </b><span class="first-name" class="">{{user.first_name}}</span></p>
        <p><b>LastName: </b><span class="last-name" class="">{{user.last_name}}</span></p>
        <p><b>Joined on: </b>{{user.date_joined}}</p>
        {%if is_staff%}
        <p>{{user.username} is a staff member</p>
        {%else%}
        <p><span class="full-name">{{user.first_name}} {{user.last_name}}</span>, a.k.a {{user.username}} is a normal member</p>
        {%endif%}
    </article>
    {%endfor%}
</section>

<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ page_obj.previous_page_number }}">previous</a>
        {% endif %}

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

        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">next</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>
<script type="text/javascript">
    let users = '{{users}}' 

   
    for(let username of document.getElementsByClassName('username')){
        if (username.textContent.length >= 15 && username.textContent.length <= 20 ){
            username.style.fontSize = '30px'
        }else if (username.textContent.length >= 11 && username.textContent.length <= 14 ){
            username.style.fontSize = '45px'
        }
        }
</script>
{%endblock content%}

正如您在分页器中看到的,我希望每页三个用户,但这甚至不起作用我仍然在一页上看到所有用户(包含用户信息的文章框)! 任何地方都没有错误消息

您需要遍历Page对象中的对象,例如文档Paginating a ListView部分中所述,因此:

{% extends 'index/base.html' %}
{% block content %}
<section class="all-users">
    {% for user in page_obj %}
        <!-- … -->
    {% endfor %}
</section>

因此,您使用{% for user in page_obj %}而不是{% for user in users %}进行迭代。

QuerySet或多或少是可变的(如果你真的想要,你可以自己修改它们,但这不是使用它们的预期方式)。 所以Page对象不会修改QuerySet ,它会简单地分析它并在内部创建一个新的并通过迭代器协议公开它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM