You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何根据下拉菜单选值实现数据库条目分页展示

Django 下拉选值联动分页实现

直接用Django自带分页组件就能做,不用额外装第三方库,三步搞定:

前端模板修改

把你现有的下拉选项套一层GET表单,加个选中自动提交的事件,同时补上分页导航,所有分页跳转链接都带上选中的每页条数参数,避免翻页时条数重置:

<!-- 每页条数选择器 -->
<form method="get" id="sizeForm">
  <select name="page_size" onchange="document.getElementById('sizeForm').submit()">
    <option value="1" {% if page_size == 1 %}selected{% endif %}>1条/页</option>
    <option value="5" {% if page_size == 5 %}selected{% endif %}>5条/页</option>
    <option value="10" {% if page_size == 10 %}selected{% endif %}>10条/页</option>
    <option value="20" {% if page_size == 20 %}selected{% endif %}>20条/页</option>
  </select>
</form>

<!-- 数据展示区,替换成你自己的模型字段即可 -->
<div class="data-list">
{% for entry in page_obj %}
  <div class="data-item">{{ entry.需要展示的字段名 }}</div>
{% endfor %}
</div>

<!-- 分页导航 -->
<div class="pager">
  {% if page_obj.has_previous %}
    <a href="?page=1&page_size={{ page_size }}">首页</a>
    <a href="?page={{ page_obj.previous_page_number }}&page_size={{ page_size }}">上一页</a>
  {% endif %}
  <span>第{{ page_obj.number }}页 / 共{{ page_obj.paginator.num_pages }}页</span>
  {% if page_obj.has_next %}
    <a href="?page={{ page_obj.next_page_number }}&page_size={{ page_size }}">下一页</a>
    <a href="?page={{ page_obj.paginator.num_pages }}&page_size={{ page_size }}">尾页</a>
  {% endif %}
</div>

不用写复杂的异步请求,这个实现新手零门槛,打开就能用。

后端视图逻辑

直接用Django内置的Paginator类,自动帮你算总页数、切分数据,记得加参数合法性校验,避免有人手动改URL传非法值拖垮数据库:

from django.core.paginator import Paginator
from django.shortcuts import render
from .models import 你的数据模型类 # 替换成你自己存100条数据的模型

def data_list_view(request):
    # 取出全量数据
    data_set = 你的数据模型类.objects.all()
    # 读取前端传的每页条数,默认值设10,做白名单校验
    try:
        page_size = int(request.GET.get("page_size", 10))
        # 只允许你预设的四个值,其他值强制改回默认
        if page_size not in [1,5,10,20]:
            page_size = 10
    except ValueError:
        page_size = 10
    # 实例化分页器,传入数据和每页条数,总页数自动计算
    paginator = Paginator(data_set, page_size)
    # 读取当前请求的页码
    current_page = request.GET.get("page", 1)
    # 获取当前页要展示的数据,自动处理非法页码
    page_obj = paginator.get_page(current_page)
    # 传给模板渲染
    return render(request, "你的模板文件路径.html", {
        "page_obj": page_obj,
        "page_size": page_size
    })

路由配置

别忘了给视图配个访问路由,在app的urls.py里加上对应路径就行,和你普通视图的路由写法完全一致。

配完直接访问就能看到效果:选20的时候自动切为每页20条、共5页,选10的时候自动切为每页10条、共10页,翻页时每页条数会保持你选中的状态,不会重置。


内容的提问来源于stack exchange,提问作者Newbie coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:51:27