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

Flask蓝图报错:NameError: name 'pages'未定义,如何让Flask识别蓝图?

Flask蓝图识别失败(NameError: name 'pages' is not defined)修复方案

问题背景

站点目录结构如下:

home/user/website_name
├── ock/
│   ├── __init__.py
│   ├── .env
│   ├── routes.py
│   ├── templates/
│   │   ├── base.html
│   │   └── home.html
│   └── static/
│       └── style.css
├── instance/
│   └── config.py
├── venv/
├── setup.py
└── wsgi.py

访问http://127.0.0.1:5000/home时抛出NameError: name 'pages' is not defined,核心原因是蓝图注册逻辑错误、路由装饰器使用不当,以及循环导入问题。


具体修复步骤

1. 修正ock/__init__.py

原代码存在未引用正确蓝图实例、缺少返回app逻辑的问题,修改后代码:

from flask import Flask

def make_app():
    app = Flask(__name__, instance_relative_config=True) 
    app.config.from_pyfile('config.py')
    
    from . import routes
    # 注册routes模块中定义的bp蓝图实例,而非蓝图名称'pages'
    app.register_blueprint(routes.bp)
    
    return app  # 必须返回app实例,供wsgi调用

2. 修正ock/routes.py

原代码错误使用全局app的路由装饰器,还存在循环导入问题,修改后代码:

from flask import render_template, Blueprint

# 蓝图默认会加载同目录下的templates和static,可省略对应参数
bp = Blueprint('pages', __name__)

# 使用蓝图自身的路由装饰器,而非全局app的
@bp.route('/')
@bp.route('/index')
@bp.route('/home')
def home():
    return render_template('home.html')

3. 确保wsgi.py正确初始化app

示例代码:

from ock import make_app

app = make_app()

if __name__ == '__main__':
    app.run(debug=True)

错误根源总结

  • 混淆了蓝图名称('pages')与蓝图实例变量名(bp):注册蓝图需传入实例对象,而非蓝图名称
  • 错误使用全局app.route装饰器:蓝图的路由需绑定到蓝图实例,否则蓝图无法生效
  • 循环导入问题:routes.py导入wsgi.py的app会导致初始化顺序混乱,蓝图场景下无需导入全局app
  • __init__.py未返回app实例:导致wsgi无法获取有效的Flask应用对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:40:23