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

Django分页URL异常带static路径致404问题求助

Django分页跳转异常(PythonAnywhere部署)

部署在PythonAnywhere的Django博客应用,分页按钮点击后URL错误跳转到https://domain_name/static/?page=页码并返回404,预期应为https://domain_name/?page=页码。


问题根源

分页链接使用相对路径,同时模板中静态资源引用未使用Django官方标签,导致浏览器解析基础URL时出错,将分页请求导向静态文件路径。


修复方案

1. 修改分页链接为绝对路径(通过URL反向解析)

将模板中分页的相对路径替换为基于blog_home路由的绝对URL,确保跳转路径始终指向首页路由:

{% if is_paginated %}
  {% if page_obj.has_previous %}
    <a class="btn btn-outline-info mb-4" href="{% url 'blog_home' %}?page=1">First</a>
    <a class="btn btn-outline-info mb-4" href="{% url 'blog_home' %}?page={{ page_obj.previous_page_number }}">Previous</a>
  {% endif %}

  {% for num in page_obj.paginator.page_range %}
    {% if page_obj.number == num %}
      <a class="btn btn-info mb-4" href="{% url 'blog_home' %}?page={{ num }}">{{ num }}</a>
    {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
      <a class="btn btn-outline-info mb-4" href="{% url 'blog_home' %}?page={{ num }}">{{ num }}</a>
    {% endif %}
  {% endfor %}

  {% if page_obj.has_next %}
    <a class="btn btn-outline-info mb-4" href="{% url 'blog_home' %}?page={{ page_obj.next_page_number }}">Next</a>
    <a class="btn btn-outline-info mb-4" href="{% url 'blog_home' %}?page={{ page_obj.paginator.num_pages }}">Last</a>
  {% endif %}
{% endif %}

通过{% url 'blog_home' %}反向解析首页路由,再拼接分页参数,彻底避免相对路径的解析错误。

2. 修复静态资源引用方式

确保模板开头加载静态文件标签,且所有静态资源(CSS/JS/图片)均使用{% static %}标签引用,避免浏览器错误解析基础URL:

{% load static %}
<!-- 示例:正确引用静态CSS -->
<link rel="stylesheet" href="{% static 'blog/css/style.css' %}">

禁止使用href="static/css/style.css"这类相对路径写法。

3. 验证PythonAnywhere静态配置

  • 确认已执行python manage.py collectstatic,将所有静态文件收集到STATIC_ROOT目录;
  • 检查PythonAnywhere后台的静态文件映射(URL为/static/,路径对应项目static目录),与你的STATIC_URL和STATIC_ROOT配置一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:47:40