Link zu statischen Flask-Dateien mit url_for


88

Wie url_forverweisen Sie in Flask auf eine Datei in einem Ordner? Zum Beispiel habe ich einige statische Dateien im staticOrdner, von denen sich einige in Unterordnern wie z static/bootstrap.

Wenn ich versuche, eine Datei von static/bootstrapbereitzustellen, wird eine Fehlermeldung angezeigt.

 <link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}">

Ich kann damit 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') }}">

Wie kann man statische Dateien richtig referenzieren url_for? Wie url_forgeneriere ich URLs für statische Dateien auf jeder Ebene?

Antworten:


177

Sie haben standardmäßig den staticEndpunkt für statische Dateien. Auch die FlaskAnwendung 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_folderOrdners.

static_folder: Der Ordner mit statischen Dateien, in dem bereitgestellt werden soll static_url_path. Der Standardwert ist der Ordner 'static' im Stammpfad der Anwendung.

Dies bedeutet, dass das filenameArgument einen relativen Pfad zu Ihrer Datei in nimmt static_folderund ihn in einen relativen Pfad konvertiert, kombiniert mit static_url_default:

url_for('static', filename='path/to/file')

konvertiert den Dateipfad von static_folder/path/to/filein den URL-Pfad static_url_default/path/to/file.

Wenn Sie also Dateien aus dem static/bootstrapOrdner abrufen möchten, verwenden Sie diesen Code:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}">

Welches wird konvertiert (mit Standardeinstellungen):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">

Schauen Sie sich auch die url_forDokumentation an .


Beachten Sie, dass beim Initialisieren Flaskeine URL-Regel für den staticEndpunkt hinzugefügt wird, sodass das Ändern dieser Attribute in einer FlaskInstanz das url_for('static', ...)Ergebnis nicht ändert . Informationen zum Ändern des statischen Endpunkts nach der Initialisierung finden Sie unter gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
— Bryce Guinta

1

In meinem Fall hatte ich spezielle Anweisungen in der 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.


Ich bin unter Windows. Wo befindet sich diese Datei? Ich versuche, .js-Dateien mit url_for zu laden und es funktioniert nicht.
— Nikos

Die primäre Konfigurationsdatei lautet /etc/nginx/nginx.conf (unter Linux). Es kann ein ähnlicher Pfad unter Windows sein (ich weiß es nicht wirklich)
— Andrew Grow

Dies ist eine serverseitige Konfiguration. Wenn Sie nur eine App auf Ihrem Desktop entwickeln, haben / benötigen Sie diese wahrscheinlich nicht.
— Adamczi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.