Flask动态路由参数为favicon.ico而非传入值的问题咨询
问题产生原因
浏览器加载任意网页时,会自动发起favicon(标签页小图标)请求。当模板中favicon引用使用相对路径时,访问/viewcar/xxx路径下的页面会让浏览器将favicon请求拼接为/viewcar/favicon.ico,该路径刚好命中/viewcar/<string:carId>动态路由,因此参数carId会被赋值为favicon.ico。传入的实际业务参数请求本身会正常执行,控制台打印的favicon.ico是额外自动发起的图标请求命中路由产生的输出,不影响正常参数的传递。
解决方案
可根据需求选择以下任意一种方案修复,推荐优先使用前两种规范方案:
- 配置favicon专属路由,将图标请求统一接住,避免动态路由误匹配。将favicon文件放在项目static目录下后,添加如下路由代码:
from flask import send_from_directory import os @app.route('/favicon.ico') def favicon(): # 替换为自己的favicon文件存放路径即可 return send_from_directory( os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon' )
- 修正模板中的favicon引用路径,不要使用相对路径,统一改为根路径绝对引用。将
car.html中类似如下的相对路径写法:
<link rel="icon" href="favicon.ico">
修改为带根路径前缀的绝对路径:
<link rel="icon" href="/favicon.ico">
修改后无论当前页面处于哪个路由层级,浏览器都会固定从站点根路径请求favicon,不会再拼接到业务路由下。
- 临时快速修复可以直接在业务路由中加过滤逻辑,跳过favicon请求的处理:
@app.route('/viewcar/<string:carId>') def viewcar(carId): # 过滤自动发起的favicon请求 if carId == 'favicon.ico': return '', 404 print(carId) car = Car.getCarById(carId) return render_template("car.html", car=car)
内容的提问来源于stack exchange,提问作者Busto
相关产品推荐
相关产品推荐

