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

Django分页元素添加页码:跳转后URL保留页码并维持分页位置

Django分页页码保留解决方案

要实现点击分页内对象链接后URL保留page参数、分页停留在对应页码的需求,只需完成以下两步修改:

1. 给对象链接拼接当前页码参数

修改分页内对象的渲染代码,在跳转URL后拼接当前的page参数。可以直接通过request.GET获取当前页码,或者用视图传递的上下文变量:

<div class="video_courses" id="block-posts">
{% for c in object_list %}
{# 获取当前页码,默认值为1 #}
{% with current_page=request.GET.page|default:1 %}
<a class="a_hover" href="{{ c.get_absolute_url }}?page={{ current_page }}">
    <div class="video_courses_block">
        <div class="video_courses_block_img"><img src="{{ c.poster.url }}" alt=""></div>
        <div class="video_courses_block_text">
            <div class="video_courses_block_text_title"><h2>[ {{ c.author }} ] {{ c.title }}</h2></div>
            
            <div class="video_courses_block_text_navigation">
                <div class="video_courses_block_text_left">{{ c.category }}</div>
                <div class="video_courses_block_text_rig">{{ course.movie_set.count }}</div>
            </div>
        </div>
    </div>
</a>
{% endwith %}
{% endfor %}
</div>

2. 优化视图确保页码参数正确传递

修改视图的get_context_data方法,将当前页码存入上下文(可选,但能让模板代码更直观),同时确保异常场景下页码值正确:

class MovieShow(DetailView):
    model = Movie
    template_name = 'movies/movie_play.html'
    context_object_name = 'movie'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 先获取完整的对象列表,再分页
        object_list = Movie.objects.filter(course__slug=self.kwargs['course_slug'])
        context['title'] = context['movie']

        paginator = Paginator(object_list, 1)
        page = self.request.GET.get('page')
        try:
            paginated_list = paginator.page(page)
        except PageNotAnInteger:
            paginated_list = paginator.page(1)
            page = 1
        except EmptyPage:
            paginated_list = paginator.page(paginator.num_pages)
            page = paginator.num_pages

        context['object_list'] = paginated_list
        context['current_page'] = page  # 将当前页码传入上下文

        return context

如果用视图传递的current_page变量,模板中的链接可以简化为:

<a class="a_hover" href="{{ c.get_absolute_url }}?page={{ current_page }}">

可选:分页组件兼容多GET参数(如果后续有其他参数需求)

如果以后页面需要携带其他GET参数,可修改分页链接代码,用request.GET.urlencode保留所有参数并替换page值:

<div class="pagination" id="pagination">
<span class="step-links" >
    {% if object_list.has_previous %}
        {# 复制当前GET参数,替换page值 #}
        {% with query_params=request.GET.copy %}
            {% query_params.set 'page' 1 %}
            <a class="page-link" href="?{{ query_params.urlencode }}"> << </a>
            {% query_params.set 'page' object_list.previous_page_number %}
            <a class="page-link" href="?{{ query_params.urlencode }}"> < </a>
        {% endwith %}
    {% endif %}

    <span class="current">
       {{ object_list.number }} из {{ object_list.paginator.num_pages }}
    </span>

    {% if object_list.has_next %}
        {% with query_params=request.GET.copy %}
            {% query_params.set 'page' object_list.next_page_number %}
            <a class="page-link" href="?{{ query_params.urlencode }}"> > </a>
            {% query_params.set 'page' object_list.paginator.num_pages %}
            <a class="page-link" href="?{{ query_params.urlencode }}"> >> </a>
        {% endwith %}
    {% endif %}
    
</span>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:15:31