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

如何实现排除/static目录的Flask全局路由?原方案致静态资源失效

解决Flask路由匹配排除/static目录的问题

你原来的代码会把所有请求(包括/static下的)都拦截到catch_all视图里,导致静态文件无法正常加载。这里提供两种实用的解决方法:


方法一:视图内判断路径(简单直接)

在catch_all函数里检查请求路径,如果是静态文件路径,就交给Flask自带的静态文件处理逻辑:

from flask import send_static_file

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    # 若路径以static/开头,返回对应静态文件
    if path.startswith('static/'):
        return send_static_file(path)
    # 其他路径返回自定义内容
    return f'You want path: {path}'

方法二:自定义路由转换器(更优雅)

通过自定义路由规则,直接让路由不匹配任何以static/开头的路径,静态文件请求会自动走Flask默认的静态路由:

from werkzeug.routing import PathConverter

# 定义转换器,正则匹配非static开头的路径
class NoStaticPathConverter(PathConverter):
    regex = r'(?!static/).+'

# 注册自定义转换器
app.url_map.converters['nostatic_path'] = NoStaticPathConverter

@app.route('/', defaults={'path': ''})
@app.route('/<nostatic_path:path>')
def catch_all(path):
    return f'You want path: {path}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:16:03