如何实现排除/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
相关产品推荐
相关产品推荐

