2014-10-20 74 views
1

Variable rules不像我期望的那樣使用static_url_pathstatic_url_path和變量規則

簡單,爲什麼這項工作:

import flask 

app = flask.Flask(__name__) 

@app.route("/", defaults={"p": "") 
@app.route("/<path:p>") 
def main(p): 
    return "<h1>Hello %s</h1>" % p 


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

但不爲呢?

import flask 

app = flask.Flask(__name__, static_url_path="") 

@app.route("/", defaults={"p": "") 
@app.route("/<path:p>") 
def main(p): 
    return "<h1>Hello %s</h1>" % p 


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

注意添加static_url_path

一些背景信息;我對Flask和AngularJS都是新手,但是在這裏結合使用它們,對於那些不熟悉AngularJS的人來說;我使用AngularJS來生成一個單頁面應用程序,其中路徑用於動態替換文檔中的內容,而不是重新加載整個頁面。因此,我需要路由到相同的html文檔(不包括在上面的例子中)的所有路徑,理想情況下來自相同的函數,以便讓AngularJS處理渲染而不是Flask。

下面的答案解決了這個問題,但它不工作時,status_url_path被使用,我不明白爲什麼。

Flask route for AngularJS with HTML5 URL mode

添加此作爲參考,因爲他是這樣做確切的事情。

http://www.youtube.com/watch?v=2geC50roans

回答

1

就相當於告訴燒瓶映射/<path:static_path>靜態文件。這意味着的一切現在被認爲是靜態的。不要這樣做!

Angular頁面不需要調用Flask靜態路由;保持您的靜態路線在/static之下,請/製作您的Angular應用程序,然後使用其他路線處理Angular AJAX調用。這些可以有適當的路徑; Angular並不指定你的Flask服務器將響應哪些路由。

然後讓您的靜態路由爲JavaScript和CSS以及圖片提供服務,例如從HTML頁面引用的實際靜態內容。

+0

謝謝Martijn,我會試着圍繞這個包圍我的腦袋,回到你身邊。 – 2014-10-20 13:09:23

+0

似乎工作正常。清楚的是,這也意味着所有地址,包括AngularJS控制器的地址,都必須包含燒瓶「靜態/」目錄?例如。 'templateUrl:「static/views/list.html」' – 2014-10-20 16:44:20

+0

@MarcusOttosson:是的,如果這些部分是靜態的(例如Flask服務器只需要生成文件數據,不在模板中插入任何內容或產生其他動態信息)。 – 2014-10-20 16:46:14