Wie verwende ich url_for
in Flask, um auf eine Datei in einem Ordner zu verweisen? Ich habe beispielsweise einige statische Dateien im Ordner static
, von denen sich einige in Unterordnern wie static/bootstrap
befinden können.
Wenn ich versuche, eine Datei von static/bootstrap
zu liefern, erhalte ich eine Fehlermeldung.
<link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}">
Ich kann auf Dateien verweisen, die sich nicht in Unterordnern befinden, was funktioniert.
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap.min.css') }}">
Was ist der richtige Weg, um statische Dateien mit url_for
zu referenzieren? Wie verwende ich url_for
, um URLs zu statischen Dateien auf einer beliebigen Ebene zu generieren?
Sie haben standardmäßig den static
Endpunkt für statische Dateien. Auch Flask
application hat die folgenden Argumente:
static_url_path
: kann verwendet werden, um einen anderen Pfad für die statischen Dateien im Web anzugeben. Der Standardwert ist der Name des static_folder
-Ordners.
static_folder
: Der Ordner mit statischen Dateien, die unter static_url_path
bereitgestellt werden sollen. Der Standardwert ist der 'statische' Ordner im Stammpfad der Anwendung.
Das bedeutet, dass das Argument filename
einen relativen Pfad zu Ihrer Datei in static_folder
verwendet und in einen relativen Pfad konvertiert, der mit static_url_default
kombiniert ist:
url_for('static', filename='path/to/file')
konvertiert den Dateipfad von static_folder/path/to/file
in den URL-Pfad static_url_default/path/to/file
.
Wenn Sie also Dateien aus dem Ordner static/bootstrap
abrufen möchten, verwenden Sie diesen Code:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}">
Welches wird in (mit Standardeinstellungen) konvertiert:
<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">
Siehe auch url_for
Dokumentation .
In meinem Fall hatte ich eine spezielle Anweisung in die Nginx-Konfigurationsdatei:
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|Zip|rar)$ {
try_files $uri =404;
}
Alle Kunden haben '404' erhalten, weil nginx nichts über Flask bekannt ist.
Ich hoffe es hilft jemandem.