You need to enable JavaScript to run this app. Django分页器未在分类文章页显示 手动访问分页链接正常
优惠活动
大模型
产品
解决方案
定价
更多

Django分页器未在分类文章页显示 手动访问分页链接正常

根因排查
  • 核心问题:上下文键名不匹配
    视图构造上下文时,将分页得到的Page对象赋值给了键category,但模板中所有分页逻辑都基于cat_articles变量做判断。模板上下文中根本不存在cat_articles这个变量,因此{% if cat_articles.has_previous %}、{% if cat_articles.has_next %}的判断结果全部为False,分页的前进、后退按钮完全不会渲染。
    模板中硬编码的三个页码项本身不受条件判断控制,无论分页对象是否存在都会渲染,但因为链接写死为#,无法实现跳转,加上上一页/下一页按钮缺失,整体呈现分页组件完全失效的状态。
    手动输入分页链接可正常运行,是因为视图层的查询、分页逻辑本身没有问题,仅模板渲染分页控件时拿不到对应的分页状态对象。
  • 次要问题1:分页页码硬编码
    当前模板中写死了1、2、3三个页码,未根据分页对象的总页数动态生成页码列表,当实际页数与硬编码数量不一致时,会出现无效链接。
  • 次要问题2:路由反向生成缺失参数
    视图函数需要同时接收slug(分类唯一标识)、page(页码)两个参数才能正常响应,当前模板中反向生成链接时仅传入了页码值,未传递当前分类的slug参数,一旦分页组件正常渲染,会直接触发参数缺失的NoReverseMatch错误。

修正后代码

视图层

from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404, render
from .models import Category

def category(request, slug, page=1):
    cat = get_object_or_404(Category, slug=slug, status=True)
    articles_cat = cat.articles.filter(status='Published')
    paginator_cat = Paginator(articles_cat, per_page=1)
    cat_articles = paginator_cat.get_page(page)
    context = {
        # 键名与模板中使用的分页对象变量保持一致
        "cat_articles": cat_articles,
        # 分类对象单独传递,供模板生成路由时获取slug
        "category": cat
    }
    return render(request, 'website/category.html', context)

模板层

<div class="blog-pagination">
  <ul class="justify-content-center">
    {% if cat_articles.has_previous %}
      <li>
        <a href="{% url 'website:category' category.slug cat_articles.previous_page_number %}">
          <i class="icofont-rounded-left"></i>
        </a>
      </li>
    {% endif %}

    {# 动态生成分页页码,替代硬编码内容 #}
    {% for page_num in cat_articles.paginator.page_range %}
      <li {% if cat_articles.number == page_num %}class="active"{% endif %}>
        <a href="{% url 'website:category' category.slug page_num %}">{{ page_num }}</a>
      </li>
    {% endfor %}

    {% if cat_articles.has_next %}
      <li>
        <a href="{% url 'website:category' category.slug cat_articles.next_page_number %}">
          <i class="icofont-rounded-right"></i>
        </a>
      </li>
    {% endif %}
  </ul>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 02:15:06