【问题标题】:Django - Export to Excel and render to templateDjango - 导出到 Excel 并呈现到模板
【发布时间】:2012-05-14 15:18:45
【问题描述】:

已更改问题:2012 年 5 月 5 日下午 2:34(太平洋标准时间)

我想知道是否可以从表单 POST 数据呈现模板,并在该模板中提供一个按钮/链接,指向模板中使用的相同 POST 数据的 Excel 电子表格。

我已经使用 POST 进行了 Excel 下载,并使用 POST 呈现了一个模板,但我希望在按下表单的提交按钮时发生以下情况: 1. 将视图中的信息发送到模板,让模板呈现信息,在模板中有一个按钮/链接,单击该按钮/链接时,会弹出一个窗口询问用户是否要打开/保存 .XLS 文件。

我用来执行每个操作的代码如下:
1 在新 URL 中呈现模板
return render_to_response('report/result.html', {long dictionary}, context_instance=RequestContext(request))

2 使用模板导出为 .XLS 文件:
response2 = render_to_response('report/result.html', {long dictionary}, context_instance=RequestContext(request))
filename = "ToolboxReport%s.xls" % (datetime.now())
response2['Content-Disposition'] = 'attachment; filename='+filename
response2['Content-Type'] = 'application/vnd.ms-excel; charset=utf-8'
return response2

这是我的预定顺序: 1. 在选项页面:选择选项,点击生成报告按钮 2. 在结果页面:显示信息,显示按钮/链接以将此信息下载为 .XLS 3.(可选)点击下载按钮:打开/保存选项出现下载与.XLS相同的信息

我似乎无法从选项页面获取用于结果页面和 .XLS 下载的 POST 数据。

【问题讨论】:

  • 所以你想提供一些文件并在同一个显示 html 页面上?我不确定这是可能的。您可能想要一个包含数据的页面,以及指向(在此页面上)xls 格式数据的链接?
  • 这也可以:)这就是我目前正在尝试做的事情,但我也坚持这样做:(
  • 我会考虑使用 django-tablib (github.com/joshourisman/django-tablib) 进行数据转换(查询集到 excel)。它甚至具有通用视图,允许您将查询集/数据集保存/导出为 Excel 表格。
  • 我的 excel 文档按照我想要的方式生成,我只需要弄清楚如何以 html 格式显示结果,并提供 excel 电子表格的下载。

标签: django forms excel templates export


【解决方案1】:

我在表单上使用了两个不同的按钮,一个用于列出结果,另一个用于将结果导出到 excel

在表单模板中:

<input type="submit" name="list" value="List Results" />
<input type="submit" name="excel" value="Export to Excel" />

在我看来功能:

# process your post data here...

# end processing your post data
if request.REQUEST.get('excel'): 
    # excel button clicked
    result = '<your content result here>'
    response = http.HttpResponse(result.encode("<encoding>", 'ignore'), content_type='application/vnd.ms-excel;charset=<charset>')
    response['Content-Disposition'] = 'attachment; filename="reports.csv"'
    response['Expires'] = "Mon, 26 Jul 2013 05:00:00 GMT"
    return response
elif request.REQUEST.get('list'):
    # List button clicked
    return render_to_response(<some render param here>, <some context>, <etc>)

【讨论】:

  • 忘记了我从来没有为我的问题选择过答案。我在另一个 stackoverflow 帖子中找到了这个解决方案。由于我选择了与您的解决方案相同的事情,FallenAngel,您将得到最佳答案!
【解决方案2】:

您只需要构建一个带有隐藏输入标签的表单,其中包含您从上一篇文章中获得的信息和一个提交按钮。 添加一个额外的参数来告诉你要下载的视图。

【讨论】:

  • 我也试过了,但是我传递的列表变得一团糟。 (我认为它们正在变成列表列表,我在尝试让它工作一个小时左右后放弃了)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多