2017-10-12 2 views
0

Je suis un débutant en utilisant Flask. Mes fichiers statiques ne ne fonctionne pas, la racine j'ai cet répertoires d'arbres:Fichiers statiques ne fonctionne pas, en utilisant jinja dans Flask

/   <-------------- launching (flask run) the site, here. 
/static 
/static/css 
/static/js 
/static/img 
/flask_mysite 
/flask_mysite/log 
/flask_mysite/templates 

La variable d'application flacon:

$ echo $FLASK_APP 
flask_mysite/__init__.py 

Pour naviguer dans la racine / dossier, en utilisant un errante VM:

flask run --host=192.168.56.101 

Dans le /flask_mysite/__init.py__ J'ai la config Jinjia:

flask_mysite.jinja_env.globals['static'] = (
    lambda filename: url_for('static', filename=filename) 
) 

from flask_mysiteimport views, models 

if __name__ == '__main__': 
    flask_mysite.run(debug=True) 

Et, dans le /flask_mysite/templates/base.html, par exemple:

<link rel="stylesheet" href="{{ static('css/main.css') }}"> 

Ainsi, le code HTML généré:

<link rel="stylesheet" href="/static/css/main.css"> 

Est-ce qu'une personne peut m'aider s'il vous plaît? :)

Merci. Fabrice

Répondre

0

Vous utilisez mal les fichiers statiques: http://exploreflask.com/en/latest/static.html

<link rel="shortcut icon" 
href="{{ url_for('static', filename='img/favicon.ico') }}"> 

Voici le code que la documentation Flask utilise pour les fichiers statiques, la façon dont vous utilisez semble être le Django façon

EDIT:

Votre flaskapp.py

app = Flask(__name__) 
@app.route("/") 
def home(): 
return render('template.html') 

Votre template.html

<!doctype html> 
<html> 
<head> 
    <link href="{{ urlfor('static' , filename='css/yourcss.css'}}"> 
    <script src="{{ urlfor('static' , filename='js/yourjs.js'}}"></script> 
</head> 
<body> 
    <!-- the rest of your html --> 
</body> 
</html> 

En supposant que vous avez « statique/css/yourcss.css » et «/statiques js/yourjs.js » et le fichier .py est à la racine du dossier avec le dossier statique

+0

Merci. Mais, en production, ça fonctionne comme ça (avec un hôte virtuel apache). Mais, il en mode local, avec une VM, ne le fait pas. Si je déplace le dossier 'static' dans 'flask_mysite/static'. C'est bon :). – fabrice

+0

En production peut-être votre alias pour "/ static" pourrait être votre dossier statique, en local si vous utilisez aussi Apache vous devriez répliquer la même config, ou utiliser la manière Flask pour servir des fichiers statiques –

+0

Et, je déplace le "statique" dossier sans changer le code comme vous me l'avez dit. #update: Non, en mode local, j'utilise ni apache ni nginx, juste la ligne de commande (flask run) – fabrice