python flask - 提供静态文件

时间:2013-04-08 16:04:50

标签: python flask

我正在尝试使用flask提供静态文件。我不知道如何使用url_for函数。生成动态内容的所有路由都运行正常,我已导入url_for,但是当我有这段代码时:

@app.route('/')
def home():
    return url_for('static', filename='hi.html')

随着我的'hi.html'文件(其中有一些基本的html)坐在目录静态中,我在加载页面时得到的字面意思是:

  

/static/hi.html

我只是错误地使用url_for吗?

2 个答案:

答案 0 :(得分:17)

url_for只返回该文件的URL。听起来您希望redirect指向该文件的URL。相反,您只是将URL的文本作为响应发送到客户端。

from flask import url_for, redirect

@app.route('/')
def home():
    return redirect(url_for('static', filename='hi.html'))

答案 1 :(得分:6)

您正在获得正确的输出。 url_for为您提供的参数生成网址。在您的情况下,您正在为hi.html目录中的static文件生成 url 。如果要实际输出文件,则需要

from flask import render_template, url_for

...

    return render_template(url_for("static", filename="hi.html"))

但此时,您的静态目录需要位于templates目录下(无论何时配置为live)。

如果您要提供这样的静态html文件,那么我的建议是通过直接从您的Web服务器将流量路由到/static/.*来在烧瓶应用程序之外提供它们。使用nginx或apache在网上有很多例子。