django分页功能实现

Ikko Lv3

以下是使用 Django 和 Ajax 实现分页功能的示例代码:

  1. views.py 中定义视图函数,用于返回需要分页的数据。
1
2
3
4
5
6
7
8
9
10
11
from django.core.paginator import Paginator
from django.http import JsonResponse
from django.shortcuts import render
from .models import MyModel

def my_view(request):
data = MyModel.objects.all()
paginator = Paginator(data, 10) # 每页显示 10 条数据
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'my_template.html', {'page_obj': page_obj})
  1. my_template.html 中,使用 Ajax 请求获取分页数据,并通过 JavaScript 将数据展示在页面上。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!-- my_template.html -->
{% extends 'base.html' %}

{% block content %}
<div id="my-data">
{% for obj in page_obj %}
<!-- 展示数据 -->
{% endfor %}
</div>
<div id="my-pagination">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">上一页</a>
{% endif %}
<span class="current-page">{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">下一页</a>
{% endif %}
</div>

<script>
$(document).ready(function() {
// Ajax 请求分页数据
$('#my-pagination a').click(function(e) {
e.preventDefault();
$.ajax({
url: '{% url "my_view" %}',
data: {page: $(this).attr('href').split('=')[1]},
success: function(data) {
$('#my-data').html(data);
}
});
});
});
</script>
{% endblock %}

在上面的示例中,我们使用 Django 提供的 Paginator 类来实现分页功能,并在模板中通过 has_previoushas_nextnumber 等属性获取分页信息。在 JavaScript 部分,我们监听上一页和下一页的链接点击事件,并使用 $.ajax 函数向 Django 视图函数发送 GET 请求获取分页数据,成功后将数据显示在页面上。

  • Title: django分页功能实现
  • Author: Ikko
  • Created at : 2023-04-11 11:09:22
  • Updated at : 2023-04-11 20:20:40
  • Link: https://redefine.ohevan.com/2023/04/11/test/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments
On this page
django分页功能实现