动态路由返回 favicon.ico 而不是 Flask 中的变量

问题描述 投票:0回答:5

下午好,

我目前正在开发一个 Flask 应用程序,我遇到了一个以前从未发生过的错误。我目前正在 Flask 中设置动态路线。这是一段代码:

@app.route('/viewcar/<string:carId>')
def viewcar(carId):
    print(carId)
    car = Car.getCarById(carId)
    return render_template("car.html", car=car)

但是,当我将任何变量传递给 URL 时(假设“http://127.0.0.1:5000/viewcar/4975facbbce511b65e14f44719340029-cf161184-91fc”),当我检查控制台中的输出时,它说 carId 等于favicon.ico 而不是“4975facbbce511b65e14f44719340029-cf161184-91fc”。关于这可能是什么的任何想法吗?我以前从未发生过这种情况。预先感谢。

python flask url dynamic flask-restful
5个回答
2
投票

我今天也遇到了这个问题,但是我注意到,当我在 Chrome 中的 http://127.0.0.1:5000/(版本 104.0.5112.101)启动我的开发 Flask 服务器时,控制台日志显示它抓取了

favicon.ico
对于我从 URL 获取的变量,但是当我使用 Safari(版本 15.3)时,URL 变量被正确解析。

现在我开始认为这与浏览器有关?


0
投票

我自己对烧瓶真的很陌生,也遇到了这个问题。对我来说,我的模块中有另一条路线,该路线在我想要的路线之前执行,并且变量名称被分配在那里,所以看起来下一个(默认?)参数必须在我想要的路线中使用。我确信我只描述了一半正确,但希望它可以帮助人们更快地调试他们的问题。


0
投票

只需将此代码添加到html文件的head标签中(在本例中为

car.html

<link rel="icon" type="image/png" href="favicon.png"/>

问题就会解决。


0
投票

此问题似乎会在本地运行 chrome 时导致出现问题,但在本地运行 safari 时不会出现问题。此外,当我尝试在 AWS 应用程序运行器上部署我的应用程序时,两个浏览器上都存在此问题。添加以下代码行使其可以在本地和 AWS 应用程序运行器上运行

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

如果有人深入了解为什么会在烧瓶中发生这种情况,我很想知道。


0
投票

我今天刚刚在 Next.js 应用程序路由器中使用动态路由遇到了这个问题。事实证明,许多浏览器请求 favicon.ico 是很常见的。我可以想到三种解决方案,第一个是我选择的选项。

  1. 在 Flask 中,静态文件夹存放静态文件(在我的例子中是公共文件夹);如果您没有,请在项目根目录中创建它。然后只需在那里创建一个空的 favicon.ico 文件,它将优先于您的动态路线。
  2. 在应用程序中添加特定路由来处理 favicon.ico。
  3. 检查动态路由本身中对 favicon.ico 的请求。
© www.soinside.com 2019 - 2024. All rights reserved.