【问题标题】:Why don't I get the Correct Result out of my Django Paginator为什么我不能从我的 Django Paginator 中得到正确的结果
【发布时间】:2021-01-06 23:05:27
【问题描述】:

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

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%}

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

【问题讨论】:

  • 你应该遍历分页器中的对象。

标签: python html django django-views pagination


【解决方案1】:

您需要遍历Page 对象中的对象,例如Paginating a ListView section of the documentation 中所述,因此:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2022-10-23
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多