2014-02-10 133 views
7

我正在構建一個基本的Web應用程序,其中包含以下項目結構。該應用程序很好,但我得到了一些靜態文件的404錯誤。燒瓶靜態文件得到404

我沒有像這樣的bootstrap.css.map文件,並且無法在燒瓶中找到與此相關的足夠文檔。

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') 

目錄結構:

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

編輯:這是我的登陸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

你可以發佈login.html的內容嗎? – Dikei

+1

我可以問你爲什麼試圖在'templates/login.html'中使用'send_file'?通常,您的模板通過使用[render_template()](http://flask.pocoo.org/docs/quickstart/#rendering-templates)返回。你確定你確實想要返回模板嗎?沒有渲染它? –

+1

@MarkHildreth,我沒有任何東西要呈現在login.html中。這只是一個簡單的登錄表單。我只想按原樣返回該文件。沒有什麼可以呈現的。 – San

回答

6

設置_static_folder位置對Flask

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

我剛剛有同樣的問題,最終解決了它這樣的:

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

編輯:我做來解決它 主要部件 -

項目結構:

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) 

我只是想這個東西出來,第一次,所以你可以在github上對我的回購檢查出我的項目進展情況: https://github.com/danfromisrael/TodoApp-Flask-Angular

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

@DanMcGrath謝謝你的提示。固定 – danfromisrael