我正在尝试使用flask提供静态文件。我不知道如何使用url_for函数。生成动态内容的所有路由都运行正常,我已导入url_for,但是当我有这段代码时:
@app.route('/')
def home():
return url_for('static', filename='hi.html')
随着我的'hi.html'文件(其中有一些基本的html)坐在目录静态中,我在加载页面时得到的字面意思是:
/static/hi.html
我只是错误地使用url_for吗?
答案 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在网上有很多例子。