如何在不同路径运行两个Flask应用并配置模板与静态资源访问
多Flask应用根路径与子路径部署配置方案
1. 调整app2的路径配置
由于app2部署在/app2路径下,需显式指定其模板、静态文件路径,同时设置静态文件的URL前缀,避免和app1的资源冲突。修改myapps/app2/app2.py:
from flask import Flask, render_template # 显式指定模板、静态文件夹路径,同时设置静态文件的URL前缀为/app2/static app2 = Flask( __name__, template_folder='templates', # 对应myapps/app2/templates static_folder='static', # 对应myapps/app2/static static_url_path='/app2/static' # 前端访问app2静态文件的URL前缀 ) @app2.route('/') def app2_index(): # 渲染app2专属模板 return render_template('app2_index.html')
app1的app1.py保持默认配置即可,它会自动读取根目录下的templates和static:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def app1_index(): return render_template('app1_index.html')
2. 配置应用调度入口
在myapps/目录下创建wsgi.py作为统一入口,使用Werkzeug的DispatcherMiddleware将两个应用挂载到对应路径:
from werkzeug.middleware.dispatcher import DispatcherMiddleware from flask import Flask from app1 import app as app1 from app2.app2 import app2 as app2 # 用空Flask实例作为调度基础,挂载app2到/app2路径 application = DispatcherMiddleware( Flask(__name__), { '/app2': app2 } ) # 将app1设为根路径默认应用 application.app = app1
3. 启动验证
开发环境
在myapps/目录下执行以下命令启动:
export FLASK_APP=wsgi:application flask run
访问验证:
http://localhost:5000:加载app1的模板与根目录静态资源http://localhost:5000/app2:加载app2的模板与子目录静态资源,静态文件URL为http://localhost:5000/app2/static/xxx
生产环境(以Gunicorn为例)
gunicorn wsgi:application
4. 关键注意事项
- 模板中引用静态文件必须使用
url_for('static', filename='xxx'),Flask会自动根据每个应用的static_url_path生成正确URL - 避免app1定义
/app2开头的路由,防止与调度规则冲突 - 若app2包含蓝图,需同步调整蓝图的静态文件路径配置
内容的提问来源于stack exchange,提问作者james_erikson
相关产品推荐
相关产品推荐

