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?

user1431282
quelle

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 .

tbicr
quelle
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.

Andrew Grow
quelle
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