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

Flask使用flask-pagination实现无查询字符串分页路径的问题咨询

解决思路
  • 第一步:调整Flask路由匹配规则
    把原来只匹配/tag.html的路由,新增带页码参数的路径匹配,同时给页码设置默认值适配第一页访问的场景。
    示例代码:
# 原有的路由装饰器,增加默认page参数
@app.route('/tag.html', defaults={'page': 1})
# 新增带页码的路径匹配规则
@app.route('/tag-<int:page>.html')
def tags_main(page):
    # 后续业务逻辑
  • 第二步:修改页码获取逻辑
    不需要再从请求查询字符串里拿page参数,直接用路由传入的page变量即可,注意调整之前offset计算的逻辑,避免页码从0开始导致的偏移错误:
# 删掉原来的 page = request.args.get('page', default=0, type=int) 这行代码
limit = 15
# 调整offset计算逻辑适配页码从1开始的规则
offset = (page - 1) * limit
  • 第三步:调整分页链接生成规则
    两种方案可选:
  1. 直接修改现有posts_data里的分页前缀:
posts_data = {
    'tagged_pages': tagged_pages,
    # 修改前缀,模板渲染时拼接页码后补充.html后缀即可
    'pagination': "/tag-",
    'present_page': page,
}

模板渲染示例(Jinja2场景):

{% if page == 1 %}
<a href="/tag.html">首页</a>
{% else %}
<a href="{{ posts_data.pagination }}{{ page }}.html">第{{ page }}页</a>
{% endif %}
  1. 直接用flask-pagination自带的href参数生成链接,无需手动拼接:
    初始化Pagination的时候新增href参数即可:
pagination = Pagination(
    page=page, 
    per_page=limit, 
    total=total_pages, 
    css_framework='bulma',
    tagged_pages=tagged_pages,
    # 直接指定分页链接的格式,库会自动替换{page}为实际页码
    href='/tag-{page}.html'
)

如果需要第一页显示为/tag.html而非/tag-1.html,可以在模板里对page=1的情况做单独判断跳转即可,避免搜索引擎重复收录问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:06:01