ホームページ  >  記事  >  バックエンド開発  >  StaticFiles を使用して FastAPI のルート パスでカスタム HTML ファイルを提供するにはどうすればよいですか?

StaticFiles を使用して FastAPI のルート パスでカスタム HTML ファイルを提供するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-10 09:09:02429ブラウズ

How to Serve a Custom HTML File at the Root Path in FastAPI with StaticFiles?

StaticFiles を使用しているときに、FastAPI ルート パスにindex.html とは異なるファイルを読み込む方法?

静的ファイルを提供する FastAPI アプリケーションでの問題

StaticFiles を使用してファイルを作成すると、ルート パスへのリクエストは、別の @app.get("/") で指定されたカスタム HTML ファイルの代わりに、index.html を返します。

解決策

によると、 StaticFiles の Starlette ドキュメント:

html - HTML モードで実行します。このようなファイルが存在する場合、ディレクトリの Index.html を自動的に読み込みます。

この問題を解決するには、以下に示すように、StaticFiles インスタンスを / (ルート パス) ではなく /static などの別のパスにマウントします。

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse

app = FastAPI()

app.mount('/static', StaticFiles(directory='static'), name='static')

@app.get('/')
async def index() -> FileResponse:
    return FileResponse('static/custom.html', media_type='html')

順序は重要です

エンドポイントのマウントと定義の順序は重要です:

  • @app.get("/" を定義した後に StaticFiles がマウントされている場合) エンドポイント、index.html は自動的にロードされません。
  • 他のすべてのエンドポイントよりも前に StaticFiles がマウントされている場合、その優先順位に従ってすべてのリクエストが処理されます。

The html=Trueオプション

を html=True に設定すると、Web コンテンツのディレクトリを 1 行で簡単に提供できます。ただし、動的コンテンツまたは追加のエンドポイントの場合は、テンプレートを使用し、html=True を使用せずに StaticFiles を別のパスにマウントすることを検討してください。

以上がStaticFiles を使用して FastAPI のルート パスでカスタム HTML ファイルを提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。