![](/img/trans.png)
[英]Why my Python program can't run correctly? It can run but don't get the result I want to
[英]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">« 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 »</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.