gpt4 book ai didi

javascript - Django : provide dynamically generated data as attachment on button press

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:51 24 4
gpt4 key购买 nike

问题概述:

我正在创建一个基于 Django 的客户端,目的是从 Web 服务返回数据。该项目的目标是根据用户在表单中选择的值从 Web 服务向用户返回数据。表单提交后,将生成一个查询字符串,将其发送到 Web 服务,页面数据将作为字符串返回。目前,该数据在浏览器中显示给用户。我想提供允许用户单击按钮并下载数据的功能。

问题:

当用户单击浏览器中的下载按钮时,我如何将数据返回给用户?如何使相同数据的不同选项可用(即 application/json 或 text/csv)?

当前(不工作)实现:

我正在尝试执行以下操作,但失败了:

View .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...})

实用程序.py

包含将数据作为字符串并返回响应对象的函数。这部分我不确定我是否做对了。我在 View 中调用这些函数,将原始数据字符串中的 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)返回给用户。我曾尝试使用 anchor 类的 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 数据的按钮时,没有任何反应。

我是不是完全错了?还是我遗漏了什么小东西?

最佳答案

解决方案:

在进一步研究问题并与同事讨论后,我的问题似乎在于尝试将响应对象传递给 javascript。对于那些感兴趣的人,我通过稍微小心地重新路由数据解决了这个问题。

View .py

在我的 views.py 中,我在主视图中添加了几行代码,用于将两个额外 View (一个用于 csv,一个用于 json)的变量设置到保存数据的响应对象。当按下各自的按钮时,将调用这两个额外的 View ,返回 httpresponse 并提示用户下载。

#MAIN VIEW FUNCTION
def view(request):
#Do stuff, get data as string

#Get data into needed formats
jsonData = jsonToJsonFile(dataString, fileName)

#Set values to external view ****NEW PART****
returnJSON.jsonData = jsonData

#Render main template
return render_to_response('mainTemplate.html', {'someForm' : aForm,
'regularData' : dataString})

#SECONDARY VIEW TO RETURN JSON DATA TO USER ****NEW PART****
def returnJSON(request):
#Simply return the response
return returnJSON.jsonData

模板.html

然后,当用户按下按钮时, anchor 通过 url 链接到辅助 django View ,该 View 将向用户显示下载选项。

<li class = 'button'>
<a href = "{% url client.views.returnJSON %}">
JSON
</a>
</li>

网址.py

最后,我只是将我的 url 模式指向 View 。

urlpatterns = patterns('',
(r'^somesite/$', views.view),
(r'^somesite/json$', views.returnJSON),
)

到目前为止,这个方法对我来说效果很好!如果有人有任何其他建议或更好的方法,我当然愿意听取。

关于javascript - Django : provide dynamically generated data as attachment on button press,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com