如何通过 AJAX 请求向后端传递模板中的字典数据

字典是通过 render_template(‘team_result.html’, qadict=teamdata, msg=msg )传到前端,需要做的操作是将这个字典teamdata传给另一个路由,用来将这个字典转成Excel导出,先在导出功能实现了,但是用的是全局变量法 感觉不是很nice,如何用post/get或者ajax方法将字典直接传到/export,然后在导出,export代码如下。

> @app.route("/export" )
> def export():
>     # export excel
>     output = BytesIO()
>     writer = pd.ExcelWriter(output, engine='xlsxwriter')
>     team_all.to_excel(writer, sheet_name='Sheet1', index=False)
>     workbook = writer.book
>     worksheet = writer.sheets['Sheet1']
>     writer.close()
>     output.seek(0)
>     resp = make_response(output.getvalue())
>     resp.headers["Content-Disposition"] = "attachment; filename=testing.xlsx"
>     resp.headers['Content-Type'] = 'application/x-xlsx'
>     return resp

你唯一需要额外了解的是 tojson 装饰器,在模板中用它把你的 Python 字典对象转换成 JSON 对象:

$.ajax({
    type: 'POST',
    url: '/export',
    data: JSON.stringify({{ your_data|tojson }}),  // 把这里的 your_data 替换成你的字典变量
    contentType: 'application/json;charset=UTF-8',
    // ...
})

然后在你的 export() 函数里通过 request.json 属性拿到这个字典数据:

from flask import request

@app.route("/export" )
def export():
    teamdata = request.json

下次提问请:

  • 尽可能给出足够的代码,比如你第一个视图函数的代码,前端尝试写的 AJAX 函数代码。
  • 使用正确的格式来格式化代码块(见论坛置顶主题)
  • 为主题设置分类/标签