在Flask中发送静态文件

时间:2015-09-19 11:35:45

标签: python windows flask

在阅读this问题和文档here后,我编写了一个应该返回静态资源(html,css和javascript文件)的函数:

server.py

import json
import random
import string
import re

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

from app import app
from flask import Flask, jsonify, request, render_template
from database_helpers import query_db, insert_db
from werkzeug.security import generate_password_hash, check_password_hash

# set the project root directory as the static folder, you can set others.
# cwd = os.path.dirname(os.path.realpath(__file__))
app = Flask(__name__, static_url_path='')
# url_for('static', filename='style.css')

@app.route('/')
def index():
    # This works
    # return "Test test test."
    # This doesn't 
    return app.send_static_file('welcome.html')

项目布局目录是:

project layout

静态路径必须是绝对路径还是相对于当前工作目录?我在做窗户。这是否意味着应将斜杠反斜杠添加到 server.py 中的所有路径?

每个请求都会收到404响应。

1 个答案:

答案 0 :(得分:0)

注释掉定义静态URL路径的行修复了问题:

<强> server.py

import json
import random
import string
import re

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

from app import app
from flask import Flask, jsonify, request, render_template
from database_helpers import query_db, insert_db
from werkzeug.security import generate_password_hash, check_password_hash

@app.route('/')
def index():
    # This works
    # return "Test test test."
    # This doesn't 
    return app.send_static_file('welcome.html')

但是,不会发送样式和图像。

为了发送html文件所需的静态内容,必须相对于根路径引用它。例如,如果 index.html 有图片:

<img src="favicon.ico"/>

然后必须更改其源代码,以便指向 favicon.ico 所在的静态目录:

<img src="static/favicon.ico"/>