124-django的翻页/分页功能,使用Paginator
2020-08-25 11:12 lzhshn 阅读(473) 评论(0) 收藏 举报假设,通过一个入口可以显示全部的文章。
<header>
<div>
<h1>K-Note</h1>
<ul>
<li><a href="{% url 'notebook:start_page' %}">Start</a></li>
<li><a href="{% url 'notebook:my_notes' 1 %}">My Notes</a></li>
<li><a href="{% url 'notebook:add_note' %}">Add Note</a></li>
</ul>
</div>
</header>
由于默认显示通常都是第1页,所以在第二个链接里,显式地给出了一个值:1
看一下对应的views函数:
def my_notes(request, page_id):
date_and_tag()
all_notes = MyNote.objects.order_by('-pub_time')
paginator_page = Paginator(all_notes, 10)
page_obj = paginator_page.get_page(page_id)
context = {'page_obj': page_obj, 'date_index': list(set(date_list)),
'tag_index': list(set(tag_list))}
return render(request, 'my_notes.html', context)
这个函数,接收url传来的page_id;
第一步:获取所有的文章,并且按照时间倒序;
第二步:实例化一个分页类:paginator_page,这个类是有两个参数:要进行分页操作的目标:all_notes,每一页有多少(10)个元素;
第三步:paginator_page对象,使用get_page方法和参数(url传来的第几页),获得一个具体的页面,然后将这个内容(page_obj)放入上下文。
最后看一下模板内容:
{% block content %}
<div class="left">
<div>
{% for note in page_obj %}
<h3><a href="{% url 'notebook:one_note' note.pk %}">{{note.title}}</a></h3>
<p>Create time:{{note.pub_time}} Update time:{{note.update_time}}</p>
{% autoescape off %}
<p>{{note.content|truncatechars:128}}</p>
{% endautoescape %}
<p>{{note.personal_tags.all}}</p>
{% endfor %}
</div>
<div>
<span>
{% if page_obj.has_previous %}
<a href="{% url 'notebook:my_notes' 1 %}">first</a>
<a href="{% url 'notebook:my_notes' page_obj.previous_page_number %}">previous</a>
{% endif %}
<span>
{{page_obj.number}} of {{page_obj.paginator.num_pages}}
</span>
{% if page_obj.has_next %}
<a href="{% url 'notebook:my_notes' page_obj.next_page_number %}">next</a>
<a href="{% url 'notebook:my_notes' page_obj.paginator.num_pages %}">last</a>
{% endif %}
</span>
</div>
</div>
{% endblock content %}
显示文章的部分,和之前start_page的一样,重点看下面的内容:
最前页:1
上一页:page_obj.previous_page_number
当前页:page_obj.number
下一页:page_obj.next_page_number
最后页:page_obj.paginator.num_pages
每点击一次,将内容传递到url里,然后执行views函数,刷新页面内容,实现翻页。
浙公网安备 33010602011771号