如何在FastAPI中设置网站图标?

22

如何为我的 FastAPI 项目的所有页面设置网站图标(favicon)?


这取决于您如何提供HTML;它将引用网站图标,并且浏览器将加载该文件。如果您需要FastAPI提供静态资源,请查看FastAPI的静态文件支持;否则,请详细说明您缺少什么以及您现在如何提供HTML。 - MatsLindh
我需要提供任何HTML才能使它工作吗?我认为在浏览器中进行纯URL基础的POST和GET请求时可能有一种方法可以使网站图标出现。 - Chris
在这种情况下,浏览器默认会请求/favicon.ico。如果您正在寻找的是这个文件,那么您需要在该路径下提供一个文件(这将假定您的端点返回请求的实际答案)。您可以添加一个@router.get('/favicon.ico')并在该视图中返回一个FileResponse:https://fastapi.tiangolo.com/advanced/custom-response/#fileresponse - MatsLindh
2个回答

41

只需在 GET 请求到达 /favicon.ico 时返回一个 FileResponse

文件结构:

root
|-main.py
|-favicon.ico

主程序.py

from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()
favicon_path = 'favicon.ico'

@app.get('/favicon.ico', include_in_schema=False)
async def favicon():
    return FileResponse(favicon_path)

修饰器中包含的关键字include_in_schema=False将路径操作从用于自动生成API文档的架构中隐藏。


6
你或许想在装饰器中加入 include_in_schema=False,以隐藏该路由在模式中的显示。 - Tom Pohl
2
所以,我认为在2021年12月,他们将FileResponse添加到了主要库中。我能够使用以下导入而不是从starlette导入来完成同样的事情。from fastapi.responses import FileResponse - Joe Jacobs

6

我曾经遇到过同样的问题,试了很多方法都没有解决,直到我为静态文件挂载了文件夹后才开始正常工作。

在main.py中

from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")

在home.html头部区域
<link id="favicon" rel="icon" type="image/x-icon" href="static/images/favicon.ico">

我怀疑这与文件夹权限相关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接