以下是使用 Django 和 Ajax 实现分页功能的示例代码:
- 在
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) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) return render(request, 'my_template.html', {'page_obj': page_obj})
|
- 在
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
| {% 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() { $('#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_previous
、has_next
和 number
等属性获取分页信息。在 JavaScript 部分,我们监听上一页和下一页的链接点击事件,并使用 $.ajax
函数向 Django 视图函数发送 GET 请求获取分页数据,成功后将数据显示在页面上。