烧瓶路由和相对路径

时间:2019-12-29 18:32:37

标签: python flask routes

我正在使用Flask建立一个网站。它利用HTML中的基本模板,该模板用于所有页面。在基本页面(称为base.html)中,有对各种静态文件的引用。参考使用相对路径。

以下是base.html中的几个示例:

<link rel="stylesheet" href="../static/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="../static/css/main.css">

只要我不在路由中包含输入参数,而是从诸如此类的请求中获取输入参数,此方法就可以正常工作

@app.route('/person/delete')
def delete_person():
    id = request.args.get('id')
    # some more logic here...

但是,如果我更改路线以包含输入参数,就像这样:

@app.route('/person/delete/<int:id>')
def delete_person(id):
    # some more logic here...

然后我的相对路径将失败。在后一个示例中,我似乎是一个比较高的层次。至少我在日志中收到以下错误:

  

127.0.0.1--[29 / Dec / 2019 19:20:14]“ GET /person/static/css/bootstrap-theme.min.css HTTP / 1.1” 404-
  127.0.0.1--[29 / Dec / 2019 19:20:14]“ GET /person/static/css/main.css HTTP / 1.1” 404-

person部分不应是URL的一部分,因为static文件夹位于根级别。有什么聪明的方法来应对这种行为?

注意:我可能可以避免使用base.html文件中的相对路径,而只是使用某种指向基本文件夹的快捷方式,但这可能意味着我永远无法使用相对路径。那就太可悲了。

1 个答案:

答案 0 :(得分:1)

如评论中所述,url_for是正确的解决方案。

其他项目的示例:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='nnn.min.css') }}">

通常,url_for不能用硬编码的URL代替,甚至不能用绝对的URL代替,因为整个Flask应用程序都可以在其基本URL中带有前缀来部署。 https://www.example.com/appnameappname是配置的一部分,只有在运行时才知道。