在view.py中,我有两个函数,一个处理表单输入并输出筛选列表,另一个将此列表导出到CSV。
下面是我的第一个函数的返回:
return render_to_response('templateX.html',
{
'queryset': queryset,
'filter_form': filter_form,
'validated': validated,
},
context_instance = RequestContext(request)
)
以下是导出函数:
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
我不知道如何从我的第一个函数中获取queryset,该函数包含我希望在CSV中使用的项目列表,并在导出到CSV函数中使用它。 或者最好的方法是将这两个功能结合起来,让用户单击复选框,确定他/她是否想下载CSV文件。 任何帮助都将不胜感激。
我建议将它们组合成一个视图函数,该函数需要一个额外的参数:
然后,在您的
urls.py
中,在您的urlpatterns
中放置类似的内容:IMHO,最好是将它们组合起来,并从显式queryset生成CSV数据。然后可以将其重写为一般的内容,如(未经测试):
你可以这样使用:
--
您提供的示例代码假设在会话数据中设置了QuerySet,这可能会导致大量的错误和安全问题。如果您将会话存储在数据库中,您可能最终会读取数据,只是以一种效率低得多的形式将其写回。
我找到了一种不同于克努丁的方法。 我在函数或全局变量之外声明了一个名为csv_list=[]的空列表。
在我的主函数(基于用户输入进行处理和过滤的函数)中,我将这个csv_列表设置为全局的,以便将其设置为queryset的“更新”版本。 然后,要生成csv,很简单: 对于csv_列表中的调用: writer.writerow([call.src,call.dst]) 返回响应
现在运转正常了。
相关问题 更多 >
编程相关推荐