Heim >Backend-Entwicklung >Python-Tutorial >Wie stelle ich mit StaticFiles eine benutzerdefinierte HTML-Datei im Stammpfad in FastAPI bereit?

Wie stelle ich mit StaticFiles eine benutzerdefinierte HTML-Datei im Stammpfad in FastAPI bereit?

Susan Sarandon
Susan SarandonOriginal
2024-11-10 09:09:02459Durchsuche

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

Wie lade ich eine andere Datei als index.html im FastAPI-Stammpfad, während ich StaticFiles verwende?

Problem

In einer FastAPI-Anwendung, die statische Dateien bereitstellt Dateien mit StaticFiles, die Anfrage an den Stammpfad gibt index.html anstelle einer benutzerdefinierten HTML-Datei zurück, die in einem separaten @app.get("/") angegeben ist.

Lösung

Gemäß der Starlette-Dokumentation für StaticFiles:

html – Im HTML-Modus ausführen. Lädt index.html automatisch für Verzeichnisse, wenn eine solche Datei vorhanden ist.

Um dieses Problem zu beheben, mounten Sie die StaticFiles-Instanz in einem anderen Pfad, z. B. /static, anstelle von / (Stammpfad), wie unten gezeigt:

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')

Reihenfolge ist wichtig

Die Reihenfolge beim Mounten und Definieren von Endpunkten ist entscheidend:

  • Wenn StaticFiles nach der Definition von @app.get("/" gemountet wird ) Endpunkt, index.html wird nicht automatisch geladen.
  • Wenn StaticFiles vor allen anderen Endpunkten gemountet wird, verarbeitet es aufgrund seiner Priorität alle Anfragen.

Der html=True Option

Das Setzen von html=True vereinfacht die Bereitstellung eines Verzeichnisses mit Webinhalten in einer Zeile. Erwägen Sie jedoch für dynamische Inhalte oder zusätzliche Endpunkte die Verwendung von Vorlagen und das Mounten von StaticFiles in einen anderen Pfad, ohne html=True zu verwenden.

Das obige ist der detaillierte Inhalt vonWie stelle ich mit StaticFiles eine benutzerdefinierte HTML-Datei im Stammpfad in FastAPI bereit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn