在我的view.py中,我有两个函数,一个处理来自表单的输入并输出一个已过滤的列表,另一个用于将此列表导出为CSV.
这是我的第一个函数的返回:
return render_to_response('templateX.html',
{
'queryset': queryset,
'filter_form': filter_form,
'validated': validated,
},
context_instance = RequestContext(request)
)
Run Code Online (Sandbox Code Playgroud)
这是导出功能:
def export_to_csv(request):
# get the response object, this can be used as a stream.
response = HttpResponse(mimetype='text/csv')
# force download.
response['Content-Disposition'] = 'attachment;filename=export.csv'
# the csv writer
writer = csv.writer(response)
qs = request.session['queryset']
for cdr in qs:
writer.writerow([cdr['calldate'], cdr['src'], cdr['dst'], ])
return response
Run Code Online (Sandbox Code Playgroud)
我不知道如何让查询集从我的第一个功能,它包含我想在我的CSV和我export_to_csv功能使用它的项目的列表.或者最好的方法是组合这两个功能,并让用户点击一个复选框,无论他/她是否要下载CSV文件.任何帮助,将不胜感激.
我建议将这些组合成一个视图函数,它需要一个额外的参数:
def my_view(request, exportCSV):
# ... Figure out `queryset` here ...
if exportCSV:
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment;filename=export.csv'
writer = csv.writer(response)
for cdr in queryset:
writer.writerow([cdr['calldate'], cdr['src'], cdr['dst'], ])
return response
else:
return render_to_response('templateX.html', {'queryset': queryset,
'filter_form': filter_form, 'validated': validated},
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
然后,在你的urls.py,把这样的东西放在你的urlpatterns:
url(r'^form', 'my_view', {"exportCSV": False}, name="form"),
url(r'^csv', 'my_view', {"exportCSV": True}, name="export"),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11938 次 |
| 最近记录: |