Lien vers les fichiers statiques Flask avec url_for

89

Comment utilisez-vous url_forFlask pour référencer un fichier dans un dossier? Par exemple, j'ai des fichiers statiques dans le staticdossier, dont certains peuvent être dans des sous-dossiers tels que static/bootstrap.

Lorsque j'essaye 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 bonne façon de référencer des fichiers statiques avec url_for? Comment url_forgénérer des URL vers des fichiers statiques à n'importe quel niveau?

user1431282
la source

Réponses:

178

Vous avez par défaut le staticpoint de terminaison pour les fichiers statiques. L' Flaskapplication a également 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 static_folderdossier.

static_folder: le dossier contenant les fichiers statiques qui doivent être servis static_url_path. Par défaut, le dossier «statique» dans le chemin racine de l'application.

Cela signifie que l' filenameargument prendra un chemin relatif vers votre fichier static_folderet le convertira en un chemin relatif combiné avec static_url_default:

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

convertira le chemin du fichier vers le chemin de static_folder/path/to/filel'url static_url_default/path/to/file.

Donc, si vous souhaitez obtenir des fichiers à partir du static/bootstrapdossier, 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">

Consultez également la url_fordocumentation .

tbicr
la source
Notez qu'il Flaskajoute une règle d'URL pour le staticpoint de terminaison lors de l'initialisation, de sorte que la modification de ces attributs sur une Flaskinstance ne change pas le url_for('static', ...)résultat. Pour modifier l'initialisation de la publication du point de terminaison statique, consultez ce gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Bryce Guinta
1

Dans mon cas, j'avais des instructions spéciales dans le fichier de configuration 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 sait rien de Flask.

J'espère que cela aidera quelqu'un.

Andrew Grow
la source
Je suis sous Windows. Où se trouve ce fichier? J'essaye de charger des fichiers .js avec url_for et cela ne fonctionne pas.
Nikos
Le fichier de configuration principal est /etc/nginx/nginx.conf (sous Linux). C'est peut-être un chemin similaire sur Windows (je ne sais pas vraiment)
Andrew Grow
Il s'agit d'une configuration côté serveur, si vous ne faites que développer une application sur votre bureau, vous n'en avez probablement pas / n'en avez probablement pas besoin.
adamczi le