118 votes

Lien vers les fichiers statiques de Flask avec url_for

Comment utilisez-vous url_for dans Flask pour référencer un fichier dans un dossier ? Par exemple, j'ai quelques fichiers statiques dans le dossier static dont certains peuvent se trouver dans des sous-dossiers tels que static/bootstrap .

Lorsque j'essaie de servir un fichier à partir de static/bootstrap j'obtiens une erreur.

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

Je peux référencer des fichiers qui ne sont pas dans des sous-dossiers avec ceci, ce qui fonctionne.

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

Quelle est la manière correcte de référencer les fichiers statiques avec url_for ? Comment utiliser url_for pour générer des urls vers des fichiers statiques à n'importe quel niveau ?

223voto

tbicr Points 4969

Vous avez par défaut le static point de terminaison pour les fichiers statiques. Voir aussi Flask a les arguments suivants :

static_url_path : peut être utilisé pour spécifier un chemin différent pour les fichiers statiques sur le web. Par défaut, il s'agit du nom du fichier static_folder dossier.

static_folder le dossier avec les fichiers statiques qui doivent être servis à static_url_path . Par défaut, le dossier "static" se trouve dans le chemin racine de l'application.

Cela signifie que le filename prendra un chemin relatif vers votre fichier dans le répertoire static_folder et le convertir en un chemin relatif combiné avec static_url_default :

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

convertira le chemin du fichier de static_folder/path/to/file au chemin de l'url static_url_default/path/to/file .

Donc, si vous voulez obtenir des fichiers à partir du static/bootstrap dossier vous utilisez ce code :

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

Qui sera converti en (en utilisant les paramètres par défaut) :

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

Regardez également url_for documentation .

1voto

Andrew Grow Points 206

Dans mon cas, j'avais une instruction spéciale dans le fichier de configuration de nginx :

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

Tous les clients ont reçu '404' parce que nginx ne sait rien de Flask.

Le fichier de configuration principal est /etc/nginx/nginx.conf sur Linux. Cela peut être similaire sous Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X