Flacon, reçois 404 de servir les fichiers statiques à l'aide de send_static_file

J'ai suivi les instructions de Comment servir les fichiers statiques dans le Flacon, mais ne pouvait toujours pas de travail.

Voici mon projet structure:

Project_path  
 |
 +--app
 |  |
 |  +--main.py
 +--static
    |
    +--js
       |
       +--jquery-1.11.2.min.js

Voici main.py:

@app.route('/js/<path:path>')
def serve_static(path):
    root_dir = os.path.dirname(os.getcwd())
    print(os.path.join(root_dir, 'static', 'js', path))
    return app.send_static_file(os.path.join(root_dir, 'static', 'js', path))

Voici index.html:

  ...
  <script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
  ...

Et lorsque je visite /, je pouvais voir le chemin d'accès correct du fichier javascript imprimé sur l'écran

qui est Project_path/static/js/jquery-1.11.2.min.js.

Mais encore, j'ai eu

127.0.0.1 - - [22/Dec/2014 11:26:30] "GET /js/jquery-1.11.2.min.js HTTP/1.1" 404 -

Toute aide est appréciée.

MODIFIER

Après avoir marché à travers le send_static_file méthode, je trouve ce qu'il se passe. Fondamentalement, je ne devrais pas utiliser abspath comme argument, flacon a un jugement dans send_static_file:

if os.path.isabs(filename) or \
   filename == '..' or \
   filename.startswith('../'):
    raise NotFound()

Et depuis le filename j'ai passé en est une abspath, flacon élever NotFound().

Il semble que ce qu'elle devait être transmis est un chemin d'accès relatif à self.static_folder(l'auto est <Flask 'main'>), qui, dans mon projet, est Project_name/app/static. Cependant, je n'ai pas static_folder moi-même ce qui signifie flacon pense que la statique dossier devrait être là.

Je suis encore à essayer de comprendre quoi faire.

  • Pourquoi allez-vous à travers tout cela? Flacon sera automatiquement servir des fichiers statiques. Vous n'avez pas besoin d'écrire une vue pour elle.
  • Pas tout à fait vrai. flacon sert des fichiers statiques automatiquement si 1. définir src="/static/js/xxx.js"; 2. statique dossier est dans le même directement avec app.py.
  • pour moi, cela m'a travaillé : @app.route('/static/<chemin d'accès:nom de fichier>') def serve_static(nom de fichier): root_dir = os.chemin d'accès.dirname(os.getcwd()) return send_from_directory(os.chemin d'accès.join(root_dir, 'statique', 'js'), nom de fichier)
InformationsquelleAutor laike9m | 2014-12-22