2014-02-10 17 views
7

Ich baue eine grundlegende Web-App mit folgenden Projektstruktur. Die App ist in Ordnung, aber ich bekomme 404 Fehler für einige der statischen Dateien.Flask statische Dateien bekommen 404

Ich habe keine Datei wie diese bootstrap.css.map und nicht in der Lage, genug Dokumente in diesem Zusammenhang zu finden.

127.0.0.1 - - [09/Feb/2014 22:37:17] "GET /static/css/bootstrap.css.map HTTP/1.1" 404 - 

@app.route('/') 
def index(): 
print 'in /' 
return send_file('templates/login.html') 

Verzeichnisstruktur:

app/ 
├── static/ 
│ └── bootstrap.min.css 
├── templates/ 
│ └── index.html 
└── app.py 

EDIT: Hier ist mein Login html

<!DOCTYPE html> 
<html lang="en"> 

<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<meta name="description" content=""> 
<meta name="author" content=""> 

<title>API Test Application</title> 

<!-- Bootstrap core CSS --> 
<link href="/static/css/bootstrap.min.css" rel="stylesheet"> 

<!-- Custom CSS for the 'Thumbnail Gallery' Template --> 
<link href="/static/css/2-col-portfolio.css" rel="stylesheet"> 
</head> 

<body> 
......simple login form.......... 
</body> 
</html> 
+0

Können Sie den Inhalt von login.html posten? – Dikei

+1

Kann ich fragen, warum Sie versuchen, 'send_file' mit' templates/login.html' zu verwenden? Normalerweise werden Ihre Vorlagen mit [render_template()] (http://flask.pocoo.org/docs/quickstart/#rendering-templates) zurückgegeben. Sind Sie sicher, dass Sie die Vorlage tatsächlich unverändert zurückgeben möchten, ohne sie zu rendern? –

+1

@MarkHildreth, ich habe in dieser login.html nichts zu rendern. Es ist nur ein einfaches Anmeldeformular. Ich möchte diese Datei nur so zurückgeben, wie sie ist. Daran ist nichts zu rendern. – San

Antwort

6

Set _static_folder Lage gegen Flask.

app = Flask(__name__) 
app._static_folder = <path to to your static directory> 
2

Ich habe gerade das gleiche Problem und löste es schließlich wie folgt aus:

https://stackoverflow.com/a/29521067/303114

Edit: Hauptteile, die ich sie lösen tat -

Projektstruktur:

enter image description here

server.py:

from server.AppStarter import AppStarter 
import os 

static_folder_root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "client") 

app = AppStarter() 
app.register_routes_to_resources(static_folder_root) 
app.run(__name__) 

AppStarter.py:

from flask import Flask, send_from_directory 
from flask_restful import Api, Resource 
from server.ApiResources.TodoList import TodoList 
from server.ApiResources.Todo import Todo 


class AppStarter(Resource): 
    def __init__(self): 
     self._static_files_root_folder_path = '' # Default is current folder 
     self._app = Flask(__name__) # , static_folder='client', static_url_path='') 
     self._api = Api(self._app) 

    def _register_static_server(self, static_files_root_folder_path): 
     self._static_files_root_folder_path = static_files_root_folder_path 
     self._app.add_url_rule('/<path:file_relative_path_to_root>', 'serve_page', self._serve_page, methods=['GET']) 
     self._app.add_url_rule('/', 'index', self._goto_index, methods=['GET']) 

    def register_routes_to_resources(self, static_files_root_folder_path): 

     self._register_static_server(static_files_root_folder_path) 
     self._api.add_resource(TodoList, '/todos') 
     self._api.add_resource(Todo, '/todos/<todo_id>') 

    def _goto_index(self): 
     return self._serve_page("index.html") 

    def _serve_page(self, file_relative_path_to_root): 
     return send_from_directory(self._static_files_root_folder_path, file_relative_path_to_root) 

    def run(self, module_name): 
     if module_name == '__main__': 
      self._app.run(debug=True) 

ich dieses Zeug bin nur versuchen, zum ersten Mal, so dass Sie mein Projekt Fortschritte bei Github auf meinem Repo überprüfen können: https://github.com/danfromisrael/TodoApp-Flask-Angular

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. –

+0

@DanMcGrath danke für den Tipp. Fest – danfromisrael