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
- 第三步:调整分页链接生成规则
两种方案可选:
- 直接修改现有
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 %}
- 直接用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
相关产品推荐
相关产品推荐

