Flask会在静态文件上返回404,而与指向静态文件夹的路径无关

时间:2019-11-17 16:16:35

标签: javascript python flask

我正在尝试使用flask访问保存在名为static的文件夹中的csv文件和两个json文件。即使我在代码中提到了静态文件夹,但在map.js文件运行时仍遇到以下404问题。

"GET / HTTP/1.1" 200 
"GET /%7B%7B%20url_for('static',%20filename%20=%20'topo_E08000025.json')%20%7D%7D HTTP/1.1" 404 
"GET /%7B%7B%20url_for('static',%20filename%20=%20'/static/sampleproperty3.csv')%20%7D%7D HTTP/1.1" 404
"GET /%7B%7B%20url_for('static',%20filename%20=%20'/static/sampleproperty3.csv')%20%7D%7D HTTP/1.1" 404 

我到处都看过,但似乎无法找出问题所在。

我希望代码从静态文件夹中获取数据,而不是返回404错误。

python代码:

from flask import Flask,render_template, url_for


app = Flask(__name__)

@app.route('/')
def index():
    return render_template('map.html')

if __name__== '__main__':
    app.run(debug=True)


映射html代码:

<!doctype html>
<html>
    <head>
        <script src="https://d3js.org/d3.v5.min.js"></script>
        <script src="https://momentjs.com/downloads/moment.min.js"></script>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
        <script src="https://rawgit.com/nstrayer/slid3r/master/dist/slid3r.js"></script>
        <script src = "https://unpkg.com/topojson@3.0.2/dist/topojson.js"></script>
        <script src = "https://d3js.org/colorbrewer.v1.min.js"></script>
        <script src = "{{ url_for('static', filename = 'mapFunctions.js') }}"></script>
        <link rel="stylesheet" href= "{{ url_for('static', filename = 'map.css') }}">

    </head>

    <body style = "background-color:gray">
        <script src = 'static/map.js' ></script>
    </body>

地图javascript代码:

const svgHeight = 550;
const svgWidth =  $(window).width(); // Uses Jquery to find the width of the window and set the svg width to that so it fills up the entire window
const svgPadding = 500;
let active = d3.select(null);
let filteredData ;
let radicusScale ;
let selected;
let originalTranslation ;
let locationLsoas = d3.json("topo_E08000025.json");
let locationWards = d3.json("topo_ward.json");
let properties = d3.csv("sampleproperty3.csv");

1 个答案:

答案 0 :(得分:2)

使用render_template呈现的HTML文件应位于templates文件夹下,而不是static

这些HTML文件使用的文件(CSS / JS)应位于static文件夹下。

我强烈建议使用像PyCharm这样的IDE,并从空白的flask项目开始。这将为您提供一个模板。

供您参考,样本层次结构应如下所示:

|static/
|---css/
|------style.css
|templates/
|---index.html
|app.py

我的app.py代码:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return render_template("index.html")


if __name__ == '__main__':
    app.run()

我的index.html代码(请注意我访问css文件的方式):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" type="text/css">
</head>
<body>
    <h1>Header</h1>
</body>
</html>

希望这会有所帮助。祝你好运。