Flask escape_chars http_405中结果的烧瓶url_

Flask escape_chars http_405中结果的烧瓶url_,flask,http-status-code-405,url-for,Flask,Http Status Code 405,Url For,我已经搜索并阅读了许多类似的帖子,但我的问题与我所发现的任何一个问题都有不同的表现 我有一个超级简单的烧瓶应用程序(如下)。它所做的只是显示test.html页面,其中有两个按钮可以调用python def Test1按钮具有硬编码的表单action=“/test”。 工作 Test2按钮的形式为action=“{url\u for('test')}” 失败原因为:>POST/%7B%7B%20url_for('test')%20%7D%7D HTTP/1.1“405- 方法不允许

我已经搜索并阅读了许多类似的帖子,但我的问题与我所发现的任何一个问题都有不同的表现

我有一个超级简单的烧瓶应用程序(如下)。它所做的只是显示test.html页面,其中有两个按钮可以调用python def

  • Test1按钮具有硬编码的表单action=“/test”。
    • 工作
  • Test2按钮的形式为action=“{url\u for('test')}”
    • 失败原因为:>POST/%7B%7B%20url_for('test')%20%7D%7D HTTP/1.1“405-
    • 方法不允许
  • 有什么问题吗? 转义字符是问题所在吗?如果是,我如何防止它们

    test.py

    #!/usr/bin/env python3
    from flask import Flask, request, send_file
    app = Flask(__name__, static_url_path='', static_folder='')
    
    @app.route('/')
    def FooTest():
      return app.send_static_file('test.html')
    
    @app.route("/test", methods=["GET","POST"])
    def test():
      print("Got Callback:")
      return "Click"
    
    if __name__ == '__main__':
      app.run(debug=True)
    
    test.html
    
    测试1
    测试2
    
    您的test.html是一个Jinja2模板,将通过调用
    render_template
    来处理该模板以创建所需的html。您按原样返回模板,因此浏览器尝试调用
    http://localhost:5000/{{url_for('test')}
    它不存在。像这样更改
    FooTest
    (您可能需要调整文件路径):


    啊,很有趣。我需要从我的静态位置提供html文件。可以从静态位置为工作url_吗?或者,这是一件坏事吗?我自己最近才开始使用Flask,无法评估这是否违反了最佳实践。我可以说的是,Jinja2是一个通用模板引擎,不特定于html,因此对renderi也很有用ng JSON或其他内容,所以我不认为这会阻止您尝试。但是,我认为静态内容的位置不是模板的最佳位置。
    from flask import render_template
    
    @app.route('/')
    def FooTest():
      return render_template('test.html')