python - 基于Django类的视图分页不起作用
问题描述
我正在尝试使用分页对我的一个页面进行分页。我尝试了一些我在网上找到的不同方法,但由于某种原因,当我使用 时paginate_by = 3
,它实际上并没有对任何内容进行分页,但仍然在页面底部显示用于分页的 html。
看法:
class SearchListView(ListView):
model = Post
template_name = "public/search.html"
paginate_by = 3
HTML:
{% extends 'public/base.html' %}
{% load staticfiles %}
{% block head %}
<link rel="stylesheet" type="text/css" href="{% static "public/css/search.css" %}" />
{% endblock %}
{% block content%}
<div class="search container-fluid">
<img src="/media/about-us.jpg" alt="">
<div class="search-title">
<h1 class="title">Search</h1>
</div>
<div class="search-main mb-5">
<form method='GET' action=''>
<input type="text" name='q' class="homebanner-search" placeholder="Enter your keywords" value='{{ request.get.q }}'>
</form>
</div>
</div>
<div class="container mt-5 mb-5">
<div class="detail-container">
{% for post in queryset %}
<a href="{% url 'post-detail' post.slug %}">
<div class="post-main">
<div class="post-image">
<img src="{{ post.image.url }}" class="card-img-top" alt="#">
<p class="post-category">{{ post.category }}</p>
</div>
<div class="post-body">
<div class="post-title">
<p class="post-title-p">Day in the life of {{ post.title }}</p>
</div>
<div class="post-text">
<p class="post-author-text text-muted">{{ post.sub_description|truncatewords:22 }}</p>
</div>
<div class="post-button">
<p>READ MORE ></p>
</div>
</div>
</div>
</a>
{% endfor %}
</div>
<div id="page_navigation" >
{% if is_paginated %}
<ul class="pagination">
{% if page_obj.has_previous %}
<li><a href="?q={{ request.GET.q }}?page={{ page_obj.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in paginator.page_range %}
{% if page_obj.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?q={{ request.GET.q }}?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="?q={{ request.GET.q }}?page={{ page_obj.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}
所以在页面上,应该显示 3 个项目,分页应该把我带到下一组 3。html 正在显示,当我点击链接时,它把我带到 2 页 2。问题是事实是 6项目正在显示,而不是 3,当我转到第 2 页时,那里有相同的 6 个项目。
解决方案
不幸的是,我无法准确重现您的错误,但确实发生的是我的对象在循环时不会呈现queryset
. 所以我建议尝试循环遍历object_list
:
{% for post in object_list %}
{{ post.name }}
{% endfor %}
您可以做的另一件事是在视图中添加 context_object_name 参数:
class SearchListView(ListView):
model = Post
template_name = "public/search.html"
paginate_by = 3
context_object_name = 'posts'
然后循环遍历:
{% for post in posts %}
{{ post.name }}
{% endfor %}
此外,由于 ListView 的模型(Post)是查询集,而不是搜索的任何内容,我无法想象搜索表单在此页面上所做的事情?所以也许链接href造成了一些麻烦。也许尝试这样的事情:
<li><a href="{{ request.get_full_path }}?page={{ page_obj.previous_page_number }}">«</a></li>
同样,我无法重现您遇到的确切问题,这很遗憾,因为我觉得我以前遇到过同样的问题,所以这些只是从对我有用的分页和您发布的代码拼凑而成的建议。希望它为您指明正确的方向。
推荐阅读
- python - 是否有模仿 pandas.DataFrame.iloc 的 Excel 等效方法?
- python - 从另一个函数调用时音频未完成
- javascript - 如何使用 JavaScript 链接 2 个输入的值
- python - Tkinter 位图未定义
- swift - 通过 UIActivityView 共享时如何为屏幕截图文件指定文件名
- amazon-web-services - Lightsail 和 S3 之间的数据流量是否免费?
- python - Flask 应用程序未在 localhost 上正确公开
- python - Django 访问令牌匹配查询不存在
- mongodb - 使用 id vs _id 实现用户记录的正确方法
- mysql - 结果的MYSQL长度未定义