【问题标题】:Flask: Url_for argument is passed as query parameterFlask:Url_for 参数作为查询参数传递
【发布时间】:2016-11-21 23:35:55
【问题描述】:

我正在尝试将 json 对象传递给 url_for,但它作为查询参数(附加到 URL)而不是作为参数传递给函数,因此出现“缺少位置参数”错误。在 Python 3.5 上使用 Flask。

任何帮助表示赞赏。谢谢!

我的代码:

##VIEWS.PY
@projects.route('/exportdata', methods=['GET','POST'])
def exportdata(export):
    return Response(export,
            mimetype='application/json',
            headers={'Content-Disposition': 'attachment;filename=export.json'})

<!-- HTML-->
<p> Download data <a href="{{ url_for('projects.exportdata', export=export) }}">here </a></p>

【问题讨论】:

    标签: python python-3.x flask


    【解决方案1】:

    您必须将导出声明为路由中的参数。

    import json
    
    from flask import jsonify
    
    ##VIEWS.PY
    @projects.route('/exportdata/<export>', methods=['GET','POST'])
    def exportdata(export):
        return jsonify(**json.loads(export))
    

    【讨论】:

    • 谢谢。当我现在尝试时,出现“未找到”错误,并且整个 JSON 内容仍在 URL 栏中。我想查看json或下载它。
    • 你能试试我刚刚编辑的更新答案吗?谢谢。
    • 另外,请记住,像这样将 JSON 传递给 url_for() 将始终将 JSON 作为查询参数发送,并且它始终在 URL 中可见。如果您不希望这样,我建议要么在 exportdata() 路由本身中生成 JSON,要么使用 HTTP 的 POST 方法。为此,您需要一个带有隐藏输入字段的 HTML
      ,并将该 替换为 .
    • 当我尝试点击链接时浏览器挂起。对于 POST 解决方案,它应该是什么样的?我应该在哪里传递 JSON 文件?谢谢
      这里
    • 你运行的是什么版本的 Flask?我使用 Flask 0.11 及其内置的 Web 服务器进行了尝试,工作正常。 JSON 的内容必须在 type="hidden" 的输入中。这里:
      这里
    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2021-12-25
    • 2020-06-15
    相关资源
    最近更新 更多