Django:按下按钮时提供动态生成的数据作为附件

2023-12-19

问题概述:

我正在创建一个基于 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 数据的按钮时,没有任何反应。

我的做法完全错误吗?或者我缺少什么小东西吗?


解决方案:

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

views.py

在我的views.py 中,我在主视图中添加了几行代码,这些代码将两个额外视图的变量(一个用于 csv,一个用于 json)设置为保存数据的响应对象。当按下各自的按钮时,将调用这两个额外的视图,返回 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

然后,当用户按下按钮时,锚点将通过 url 链接到辅助 django 视图,该视图将向用户呈现下载选项。

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

urls.py

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:按下按钮时提供动态生成的数据作为附件 的相关文章

随机推荐

  • 如何有条件地设置 rich:dataTable 中的行样式

    如何根据条件更改特定行的样式 我可以在 rich column 样式类属性中使用 JSF EL 但我必须为每一列编写 我想改变整行 Thanks 具体针对每一列
  • WCF:只允许单个客户端并拒绝其他客户端的服务

    我需要创建一个一次只允许一个客户端的 WCF 服务 所有其他请求都应被拒绝 并且客户端必须稍后重试 该服务大约需要一分钟才能完成请求 我试过了 ServiceBehavior IncludeExceptionDetailInFaults t
  • WPF:无法在 XAML 中设置只读集合的​​项目

    场景非常简单 我的自定义控件有一个只读集合属性 并且我想在 XAML 中设置集合的项目 像这样
  • 确保pandas滚动窗口函数中窗口大小恒定

    需要对数据框中每个大小为 2 的滚动窗口执行一些自定义操作 但rollingpandas 中的函数 返回一个带有初始窗口位置和 1 个元素的输出 我尝试设置min periods 但在这里没有帮助 df pd DataFrame B 0 1
  • 如何获取html页面上特定部分的背景颜色

    我使用渐变来设置 html 正文背景的颜色 CSS background linear gradient to top fb4080 10 ebb523 22 58d27c 40 2aff00 52 0fd2b7 65 6b6dff 80
  • Android 语音识别命令

    Goal 语音识别开始 说出语音命令并完成正确的操作 播放一些音乐会启动音乐播放器播放任何应该发生的事情 现在的情况 我正在运行一个测试应用程序 它启动 Android 语音识别 成功监听并将结果返回到我的 Activity 启动语音识别的
  • 什么是haslayout?

    我读过一些关于它的文章 但没有明白到底是什么 有人可以解释一下吗 是不是只和IE6有关 什么是zoom 1 Is layout是只有 IE 的 TAG 吗 Edit 我发现此信息对我来说非常有用 因为 Internet Explorer 太
  • Java:在基元上同步?

    在我们的系统中 我们有一个方法 当使用特定 ID 调用它时 它会执行一些工作 public void doWork long id 现在 这项工作可以针对不同的 ID 并发完成 但如果 2 个线程使用相同的 ID 调用该方法 则一个线程应该
  • Elasticsearch 丢弃了太多请求——缓冲区会改善情况吗?

    我们有一个工作集群 将索引请求发送到 4 节点 Elasticsearch 集群 文档在生成时就会被索引 并且由于工作人员具有高度并发性 Elasticsearch 在处理所有请求时遇到了困难 给出一些数字 工作人员同时处理多达 3 200
  • 我不明白侦听器中 lambda 表达式的参数传递

    我开始学习 Kotlin 没多久 关于 Android 侦听器中 lambda 表达式的传递 有些部分我不明白 In JAVA botton setOnClickListener new View OnClickListener Overr
  • 如何获取和使用 Alexa 技能意图响应的确认“是”或“否”

    我正在开发一项 Alexa 技能 在启动时它会询问Do you want to perform something 取决于用户的回复 yes or no 我想发起另一个意图 var handlers LaunchRequest functi
  • 在 Android Studio 中将文件(使用 Git 跟踪)从 Java 转换为 Kotlin

    Android Studio 2 3 2 中从 Java 到 Kotlin 的转换 3 0 中的行为相同 会创建一个新文件并删除以前的文件 所以 Git 对这个转换一无所知 并且 git 历史记录不会保存 在 Intellij Idea 中
  • 如何将 LockBox 3 安装到 Delphi 7 中?

    这是我第一次安装 Lockbox 的库 我从sourceforge下载了3 4 3版本 并拥有Delphi 7 第一步是让这个傻瓜在Delphi 7下编译 这真是太糟糕了 我确实希望这些组件在安装后更易于使用 好的 我有一个看起来像这样的单
  • 实现 Parcelable 接口时如何读/写布尔值?

    我正在尝试做一个ArrayList Parcelable为了将自定义对象列表传递给活动 我开始写一个myObjectList扩展的类ArrayList
  • 如何安装旧的SDK平台

    我想针对 Android 1 3 平台而不是最新的 2 2 进行测试 Here is how my Android SDK and AVD Manager look likes However I was expecting screen
  • 当存储日期 <= 最近 24 小时时,Django 返回计数

    我是菜鸟 所以这可能是一个简单的问题 但它让我难住了 我正在创建一个测试表单 以便每次用户创建文档时 创建文档的日期和时间都将存储在 CreatedDocumentDetails 模型中 我还没有实现这个代码 我专注于返回过去 24 小时内
  • 如何在控制器中合并 Laravel 对象

    我有一个控制器 我想将多个表中的数据与并行结构结合起来 我最终想要得到的是一个可以从控制器返回的对象 这样我就可以在 Backbone 中解析它 我想做这样的事情 public function index mc MainContact w
  • 为什么左值在某些地方转换为值而不是其他地方? [复制]

    这个问题在这里已经有答案了 考虑这段代码 int x 99 int p x p p 1 为什么要这样做 p在左侧和右侧 运营商不同 编译器如何知道使用左 p成为对象x和右边的 p成为x 具体来说 如果编译器评估 p成为x 为什么 p左侧的计
  • 如何在VBA中安排邮件发送到特定时间

    如何在VBA中安排邮件发送到特定时间 生成邮件的代码 Set olApp CreateObject Outlook application Set olItem olApp CreateItem 0 olItem display olIte
  • Django:按下按钮时提供动态生成的数据作为附件

    问题概述 我正在创建一个基于 Django 的客户端 旨在从 Web 服务返回数据 该项目的目标是根据用户在表单中选择的值从 Web 服务将数据返回给用户 表单提交后 会生成一个查询字符串 发送到 Web 服务 并以字符串形式返回页面数据