static_url_path和变量规则

1 投票
1 回答
672 浏览
提问于 2025-04-28 13:20

当使用 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 模式

添加这个链接作为参考,因为他正好在做同样的事情。

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

暂无标签

1 个回答

1

你实际上是在告诉Flask把 /<path:static_path> 映射到静态文件。这意味着所有的东西现在都被认为是静态的。不要这样做!

Angular页面不需要调用Flask的静态路由;把你的静态路由放在 /static 下,让 / 负责展示你的Angular应用,然后用其他路由来处理Angular的AJAX请求。这些路由可以有合适的路径;Angular并不限制你的Flask服务器会响应哪些路由。

然后保持你的静态路由来提供JavaScript、CSS和图片等内容,比如从你的HTML页面引用的实际静态内容。

撰写回答