Flask注册蓝图报错NameError: name 'url_prefix' is not defined如何解决
问题原因与解决方法
核心错误NameError: name 'url_prefix' is not defined的本质是:create_app函数运行到注册projects蓝图的位置时,调用了没有提前定义的url_prefix变量,结合你提供的信息,优先按以下步骤排查:
核对实际运行代码与你贴出的代码是否一致
你贴出的是app/__init__.py的代码,但报错日志指向的是<path-to-app-root>/__init__.py(站点根目录下的__init__.py文件,不是app子目录内的),你需要优先打开这个根目录下的__init__.py,查看第34行的内容。
绝大多数情况是这行代码写为了app.register_blueprint(projects, url_prefix=url_prefix),你没有提前定义url_prefix变量就直接传参,就会触发这个报错。如果蓝图定义里已经写了url_prefix='/projects',直接删掉注册时的url_prefix=url_prefix参数即可;如果要在注册时指定,改为url_prefix='/projects'即可。排查导入的
projects对象是否正确
如果确认代码和你贴的一致,可以在注册projects蓝图之前加一行调试代码,验证导入的对象是否正确:
print(type(projects), repr(projects))
正常输出应该是<class 'flask.blueprints.Blueprint'>开头的蓝图对象信息,如果输出其他内容,说明存在循环导入或者同名变量覆盖的问题,需要调整导入顺序。
- 可选的兼容写法调整
你可以把蓝图定义和注册的参数拆分,避免参数传递问题:
- 修改
app/projects/views.py里的蓝图定义,去掉内置的url_prefix参数:
projects = Blueprint('projects', __name__)
- 修改
app/__init__.py里的注册代码,显式传url_prefix:
app.register_blueprint(projects, url_prefix='/projects')
内容的提问来源于stack exchange,提问作者boing
相关产品推荐
相关产品推荐

