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

如何在不同路径运行两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:10