当app.route中有一个尾部斜杠时,为什么渲染模板不起作用?

时间:2016-02-09 22:40:24

标签: url flask routes

我正在使用Flask应用程序并遇到一些路由问题。

以下功能正常工作(如在预期中呈现模板一样):

@app.route('/page1', methods = ['POST'])
def page1():
    ...
    return render_template('page1.html')

然而,几乎相同的功能

@app.route('/page1/', methods = ['POST'])
def page1():
    ...
    return render_template('page1.html')

无法再加载与page1.html相关联的任何css资源。 html加载顺利,只是其他资源无法找到。

如果有人能够深入了解为什么额外的斜杠会让这种情况发生,那就太棒了!

1 个答案:

答案 0 :(得分:1)

这是默认的烧瓶行为see werkzeug docs。要更改它,请使用:

@app.route('/page1', strict_slashes=False)

或普遍改变它,更改应用行为:

app = Flask(__name__)    
app.url_map.strict_slashes = False

另一种方法是用@app.route包裹:

def route(*a, **kw):
    kw['strict_slashes'] = kw.get('strict_slashes', False)
    return app.route(*a, **kw)

并使用@route作为路径装饰器,使用或不使用斜杠(而不是@app.route)进行路由。

最后一种方式是首选,因为它仅适用于您想要此行为的路线,而不是单一路线或所有路线。