Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在浏览器中显示搜索结果后,将其导出到csv文件_Python_Django_Csv_Download_Export - Fatal编程技术网

Python 在浏览器中显示搜索结果后,将其导出到csv文件

Python 在浏览器中显示搜索结果后,将其导出到csv文件,python,django,csv,download,export,Python,Django,Csv,Download,Export,我已经试着解决这个问题一个星期了,但找不到合适的解决办法。 我有一个搜索栏来输入基因ID(或者上传一个文件)。然后它查询数据库并返回这些基因之间的相互作用。我们在html页面的矩阵中显示这些交互。(我基本上返回一个python数组) 现在,我想包括一个导出按钮,以下载csv或文本文件中的矩阵/表格,以便用户可以操纵它进行进一步的研究 如何在不将每个查询结果保存到文件中的情况下执行此操作? 因为在返回矩阵之后,python脚本(views.py)已经运行,并且基因ID也消失了 可以用jQuery完

我已经试着解决这个问题一个星期了,但找不到合适的解决办法。 我有一个搜索栏来输入基因ID(或者上传一个文件)。然后它查询数据库并返回这些基因之间的相互作用。我们在html页面的矩阵中显示这些交互。(我基本上返回一个python数组)

现在,我想包括一个导出按钮,以下载csv或文本文件中的矩阵/表格,以便用户可以操纵它进行进一步的研究

如何在不将每个查询结果保存到文件中的情况下执行此操作? 因为在返回矩阵之后,python脚本(views.py)已经运行,并且基因ID也消失了

可以用jQuery完成吗


非常感谢你的帮助

您只需提供一个包含当前url的链接,并加上一个标志,以指示它是下载csv请求而不是呈现页面请求:

def return_result(request):
    # your original query
    query = request.GET.get('id', None)
    if query:
        results = Model.objects.filter(field=query)

    response = request.GET.get('download', None)
    if response == 'csv':
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
        # create a csv
        return response
    else:
        context = {'results': results}
        return render(request, 'results.html', context)
在您的页面中,您创建了一个下载csv的链接,
{{request.get_full_path}
用于从请求中获取当前url:

<a href="{{ request.get_full_path }}&download=csv">Download as CSV</a>


视图返回进行搜索需要多长时间?对于少数ID来说非常快,对于大型文件则需要1-2分钟。我认为对此您无能为力,因为http请求/响应是无状态的,如果不使用外部缓存,您无法记录结果。即使您有缓存,如果1000个用户同时下载csv,您的缓存也会受到影响。最好的办法是优化视图函数,使其更快地返回结果。然后下载csv函数将再次调用视图以应用相同的逻辑,但返回csv。好的,但我的问题是:下载csv函数如何再次调用视图?我从哪里得到请求?我不希望用户再次输入基因ID。您正在使用
GET
方法提取用户输入,对吗?谢谢。我尝试了这个,它给了我一个空文件,其中的代码是:response=='csv':response=HttpResponse(content_type='text/csv')response['content-Disposition']='附件;filename=“results.csv”'writer=csv.writer(response)writer.writerow(['this','is','the','first','row'])writer.writerow(['1','2','3','4','5'])return response我查看了django文档,我真的不明白为什么我在使用与那里使用的代码完全相同的代码时会得到一个空的csv文件?好的,我通过将它移动到一个单独的函数来修复它。我don@t但我知道为什么它不起作用。