web-dev-qa-db-fra.com

Lien vers les fichiers statiques Flask avec url_for

Comment utilisez-vous url_for dans Flask pour référencer un fichier dans un dossier? Par exemple, le dossier static contient des fichiers statiques, 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 faire référence à des fichiers qui ne sont pas dans des sous-dossiers avec cela, ce qui fonctionne.

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

Quelle est la bonne façon de référencer des fichiers statiques avec url_for? Comment utiliser url_for pour générer des URL vers des fichiers statiques à n'importe quel niveau?

69
user1431282

Vous avez par défaut le static endpoint pour les fichiers statiques. De plus, Flask application 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, le nom du dossier static_folder.

static_folder: le dossier avec les fichiers statiques qui devraient être servis à static_url_path. Par défaut, le dossier 'statique' dans le chemin racine de l'application.

Cela signifie que l'argument filename prendra un chemin relatif vers votre fichier dans static_folder et le convertira 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 dans le chemin de l’URL static_url_default/path/to/file.

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

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

Ce 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 aussi url_for documentation .

134
tbicr

Dans mon cas, j'avais des instructions spéciales 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' car nginx ne savait rien à propos de Flask.

J'espère que ça aidera quelqu'un.

0
Andrew Grow