2014-02-10 125 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