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?
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 .
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.