2013-04-08 144 views
10

我想使用烧瓶服务静态文件。我不知道如何使用url_for函数。我所有的路线生成动态内容工作正常,我已经导入url_for,但是当我有这样的代码:蟒蛇烧瓶 - 提供静态文件

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

随着我的“hi.html”文件(该文件中有一些基本的HTML)坐在目录静态的,什么,当我加载页面我得到的是字面上的:

/static/hi.html

我是不是使用不当url_for?

回答

16

url_for刚刚返回该文件的URL。这听起来像你想redirect到该文件的URL。相反,您只是将URL的文本发送给客户端作为响应。

from flask import url_for, redirect 

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

当然。我是个白痴。你很聪明。谢谢。 – user1276273 2013-04-08 16:27:17

+11

这里没有白痴,只有那些还不知道的人。 sberry的服务静态文件的建议也是适当的。 – 2013-04-08 16:34:14

6

你正在得到正确的输出,你正在做什么。 url_for生成url为您提供的参数。在你的情况下,你正在static目录中生成hi.html文件的网址。如果你想实际输出的文件,你会想

from flask import render_template, url_for 

... 

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

但在这一点上,您的静态目录将需要的模板目录(其中以往任何时候都被配置为住)下。

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

+0

谢谢 - 我有从服务器直接提供服务的意图,就在我开发的时候,我希望能够用瓶子为他们提供服务,而不仅仅是让我疯狂。 – user1276273 2013-04-08 16:35:52