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

如何在Django的Score_by函数中保留原有功能并添加分页?

在Django的Score_by函数中添加分页功能(保留原有功能)

1. 视图层集成Django原生分页组件

直接用Django自带的Paginator和Page类即可,不用额外安装第三方库。修改你的Score_by视图函数,先保留原有筛选、排序逻辑,再嵌入分页处理:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render

def Score_by(request):
    # 原有逻辑:处理分数区间筛选
    min_score = request.GET.get('min_score', 0)
    max_score = request.GET.get('max_score', 10)
    # 假设你的影视数据模型是Movie,score为分数字段
    movies = Movie.objects.filter(score__gte=min_score, score__lte=max_score)
    
    # 原有逻辑:按分数排序(支持升降序)
    sort_dir = request.GET.get('sort', 'desc')
    movies = movies.order_by('-score' if sort_dir == 'desc' else 'score')
    
    # 新增分页逻辑
    page_size = 12  # 自定义每页展示的条目数量
    paginator = Paginator(movies, page_size)
    page_num = request.GET.get('page')
    
    try:
        page_obj = paginator.page(page_num)
    except PageNotAnInteger:
        # 页码非整数时返回第一页
        page_obj = paginator.page(1)
    except EmptyPage:
        # 页码超出范围时返回最后一页
        page_obj = paginator.page(paginator.num_pages)
    
    # 调用TMDB API:仅处理当前页的条目,减少不必要的API请求
    for movie in page_obj.object_list:
        # 假设你有封装好的TMDB调用函数get_tmdb_details,传入影视的TMDB ID
        tmdb_data = get_tmdb_details(movie.tmdb_id)
        movie.tmdb_info = tmdb_data  # 将详情挂载到对象上供模板使用
    
    context = {
        'page_obj': page_obj,
        'min_score': min_score,
        'max_score': max_score,
        'sort': sort_dir
    }
    return render(request, 'your_template.html', context)

2. 模板层渲染分页导航

在模板中基于page_obj渲染分页控件,同时保留筛选、排序的URL参数,确保分页时不会丢失原有查询条件:

<!-- 影视列表渲染 -->
<div class="movie-container">
    {% for movie in page_obj %}
        <div class="movie-card">
            <h4>{{ movie.title }}</h4>
            <p>本地评分:{{ movie.score }}</p>
            <!-- 渲染TMDB返回的详情 -->
            {% if movie.tmdb_info %}
                <p>TMDB评分:{{ movie.tmdb_info.vote_average }}</p>
                <img src="https://image.tmdb.org/t/p/w200{{ movie.tmdb_info.poster_path }}" alt="{{ movie.title }}海报">
            {% endif %}
        </div>
    {% endfor %}
</div>

<!-- 分页导航栏 -->
<div class="pagination-bar">
    {% with request.GET.copy as query_params %}
        {% if page_obj.has_previous %}
            {% query_params.setlist 'page' page_obj.previous_page_number %}
            <a href="?{{ query_params.urlencode }}" class="page-btn">上一页</a>
        {% endif %}

        <span class="page-status">第 {{ page_obj.number }} 页 / 共 {{ page_obj.paginator.num_pages }} 页</span>

        {% if page_obj.has_next %}
            {% query_params.setlist 'page' page_obj.next_page_number %}
            <a href="?{{ query_params.urlencode }}" class="page-btn">下一页</a>
        {% endif %}
    {% endwith %}
</div>

3. 核心注意事项

  • API调用优化:只对当前页的影视条目调用TMDB接口,避免一次性请求大量数据触发API限流,同时提升页面加载速度;
  • 参数保留:分页链接必须携带原有筛选(min_score/max_score)和排序(sort)参数,用request.GET.copy()复制现有查询参数后替换page值即可;
  • 异常处理:针对非法页码(非数字、超出范围)做兜底处理,避免页面崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:57:17