问题概述:
我正在创建一个基于 Django 的客户端,旨在从 Web 服务返回数据。该项目的目标是根据用户在表单中选择的值从 Web 服务将数据返回给用户。表单提交后,会生成一个查询字符串,发送到 Web 服务,并以字符串形式返回页面数据。目前,该数据在浏览器中显示给用户。我想提供允许用户单击按钮并下载数据的功能。
问题:
当用户单击浏览器中的下载按钮时,如何将数据返回给用户?如何使相同数据的不同选项可用(即 application/json 或 text/csv)?
当前(未工作)实施:
我正在尝试执行以下操作,但失败了:
views.py
返回我的模板的 render_to_response 对象。我将表单以及各种表单中的数据传递给模板。
def view(request):
#Do stuff, get data as string
#Get data into needed formats (see utils.py)
jsonData = jsonToJsonFile(dataString, fileName)
return render_to_response('template.html', {'someForm' : aForm,
'regularData' : stringData,
'jsonData' : jsonData...})
utils.py
包含将数据作为字符串并返回响应对象的函数。这部分我不确定我是否做得正确。我在视图中调用这些函数,以将 jsonData (和 csvData)从原始数据字符串转换为正确的格式。
def jsonToJsonFile(dataString, fileName):
#Get the data as json
theData = json.dumps(dataString)
#Prepare to return a json file
response = HttpResponse(theData, mimetype = 'application/json')
response['Content-Disposition'] = 'attachment; filename=' + str(fileName) + '.json'
#return the response
return response
模板.html
我目前正在将响应传递到模板中。这就是我真正迷失的地方,还没有开始寻找好的解决办法。我希望在单击按钮时需要使用 javascript 将变量(jsonData 和 csvData)返回给用户。我尝试使用锚类的 onclick 操作,然后使用 javascript 返回响应的 django 变量 - 但这确实不起作用。
<li class = 'button'>
<a href = "#dataButtons" onclick = "javaScript:alert('test');">
TEST
</a>
</li>
<li class = 'button'>
<a href = "#dataButtons" onclick = "javaScript: var a = '{{ jsonData }}'; return a;">
JSON
</a>
</li>
我将测试部分放在那里,测试警报是否有效。确实如此。但是,当我单击 json 数据的按钮时,没有任何反应。
我的做法完全错误吗?或者我缺少什么小东西吗?