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

使用Flask时持续遭遇404错误,请求技术排查与解决

Flask 全站404问题的修复方案

核心问题:重复创建Flask实例导致路由未注册

你的routes.py存在重复初始化Flask实例的致命问题:

  • 代码先从blog包导入了__init__.py中创建的正确app实例,但随后连续两次调用Flask(__name__)重新生成新的app,直接覆盖了之前导入的实例。
  • 所有@app.route路由都注册到了这个新的、未被实际运行的app上,而WSGI脚本导入的是__init__.py里的原始app——这个app没有绑定任何路由,因此所有请求都会返回404。

修复步骤

1. 修正routes.py代码

删除重复的Flask初始化代码,直接使用从blog导入的app注册路由:

from flask import render_template, url_for
from blog import app, db
from blog.models import User, Post

# 删除以下两行重复的初始化代码
# app = Flask(__name__, template_folder='templates', static_folder='static')
# app = Flask(__name__)

@app.route('/')
@app.route("/home")
def home():
    posts = Post.query.all()
    return render_template('home.html', posts=posts)

@app.route("/about")
def about():
    return render_template('about.html', title='About')

2. 确认导入顺序

__init__.py中最后导入routes的顺序是正确的——必须先完成app和数据库的初始化,再导入路由模块,才能确保路由注册到正确的app实例上。

3. 测试启动逻辑

确保使用正确的启动方式:

  • 若用WSGI脚本启动:直接运行你的WSGI文件,此时导入的是__init__.py中绑定了路由的正确app实例。
  • 若本地调试:可在__init__.py末尾添加启动代码(或保留WSGI脚本的启动逻辑):
    # 在__init__.py最后添加
    if __name__ == '__main__':
        app.run(debug=True)
    

额外检查点

  • 确认templates和static文件夹位于项目根目录(与blog包同级),当前__init__.py的默认路径配置是正确的。
  • 若修复后仍有问题,可检查数据库连接是否正常:Post.query.all()若抛出异常,可能导致请求返回500错误,但你的场景是404,核心问题还是路由未注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:54:18