static_url_path和变量规则
当使用 static_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。
下面的答案解决了这个问题,但在使用 static_url_path
时却不奏效,我搞不清楚为什么。
Flask 路由与 AngularJS 的 HTML5 URL 模式
添加这个链接作为参考,因为他正好在做同样的事情。
1 个回答
1
你实际上是在告诉Flask把 /<path:static_path>
映射到静态文件。这意味着所有的东西现在都被认为是静态的。不要这样做!
Angular页面不需要调用Flask的静态路由;把你的静态路由放在 /static
下,让 /
负责展示你的Angular应用,然后用其他路由来处理Angular的AJAX请求。这些路由可以有合适的路径;Angular并不限制你的Flask服务器会响应哪些路由。
然后保持你的静态路由来提供JavaScript、CSS和图片等内容,比如从你的HTML页面引用的实际静态内容。