Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 Django HttpResponse-带有文件和内容的响应_Python_Django_Django Views - Fatal编程技术网

Python Django HttpResponse-带有文件和内容的响应

Python Django HttpResponse-带有文件和内容的响应,python,django,django-views,Python,Django,Django Views,有没有一种简单的方法可以做到以下几点 在视图中获取请求后, 是否向用户发回一个文件以及重新呈现的页面模板? 类似于将响应与文件“合并”并呈现\u到\u响应 以下是我返回带有文件的响应的方式: filename = "/path/to/somewhere" wrapper = FileWrapper(open(filename)) content_type = mimetypes.guess_type(filename)[0] response = HttpResponse(wrapper,co

有没有一种简单的方法可以做到以下几点

在视图中获取请求后, 是否向用户发回一个文件以及重新呈现的页面模板? 类似于将响应与文件“合并”并呈现\u到\u响应

以下是我返回带有文件的响应的方式:

filename = "/path/to/somewhere"
wrapper  = FileWrapper(open(filename))
content_type = mimetypes.guess_type(filename)[0]
response = HttpResponse(wrapper,content_type=content_type)
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = "attachment; filename=%s"%filename
return response
以下是我返回带有渲染数据的普通模板的方式:

data = getData()
return render_to_response('../templates/some_template.html', {'data': data,})
(我可能用复制粘贴删除了一些重要的行,但为了说明我的观点,这段代码是有效的,问题不在于这两个代码示例)

问题是:如何将两者“合并”在一起? 有没有一种简单的方法可以使用django标准功能实现这一点? 我必须使用Ajax吗?(我不熟悉ajax……因此,如果有一种方法可以在没有ajax的情况下实现这一点,那就更好了)


谢谢,

如果您简化了对超文本传输协议的理解,那么您的用户与应用程序交互的方式就是发送一个请求,应用程序会对此做出响应。在第节中,当您返回与“附件”处置类型匹配的响应时,您将指示用户的客户端“提示用户在本地保存响应,而不是正常处理响应”

不支持为包含HTML和其他内容类型的响应提供服务,这些响应可以指示客户端保存一个并显示另一个。它不受支持这一事实并不意味着你不应该探索其他方法来提供这样的用户体验,但它应该暗示我们没有实践它,用户也不会期望它


但是,撇开事实不谈,如果您真的想这样做,您需要了解服务文件和显示新的HTML文档将需要两个独立的请求/响应上下文。最简单的设计将包括用户将从中发起检索文件请求的页面,也会订阅应用程序,当用户已完成检索文件时,会收到通知,然后会显示一些新内容或重定向到新页面。

如果您简化了对超文本的查看传输协议(Transfer Protocol),用户与应用程序交互的方式是发送应用程序提供响应的请求。在第节中,当您返回与“附件”处置类型匹配的响应时,您将指示用户的客户端“提示用户在本地保存响应,而不是正常处理响应”

不支持为包含HTML和其他内容类型的响应提供服务,这些响应可以指示客户端保存一个并显示另一个。它不受支持这一事实并不意味着你不应该探索其他方法来提供这样的用户体验,但它应该暗示我们没有实践它,用户也不会期望它


但是,撇开事实不谈,如果您真的想这样做,您需要了解服务文件和显示新的HTML文档将需要两个独立的请求/响应上下文。最简单的设计将包括用户将从中发起检索文件请求的页面,也将订阅应用程序,当用户已完成检索文件时,将收到通知,然后离开显示一些新内容或重定向到新页面。

可以使用多部分

HttpResponse是子类化的,允许返回多部分数据

在客户端,您需要以块的形式接收数据,并根据适当的Mime类型进行解析

这里是一个实现


可以使用多部分

HttpResponse是子类化的,允许返回多部分数据

在客户端,您需要以块的形式接收数据,并根据适当的Mime类型进行解析

这里是一个实现


我无法想象您希望用户在这里看到/得到什么。这到底是怎么回事?你要的是同一个回复中的两个内容?要做到这一点并不容易。您可能应该使用Ajax.Daniel—我在页面上有一个按钮,我希望它可以同时执行两个任务—将文件发送回用户,并使用新数据更新页面上的“div”部分。也许我在这里所建议的(同时使用2个请求)不是解决方案,但是关于如何获得正确的用户体验的任何想法都是好的,我无法想象您希望用户在这里看到/得到什么。这到底是怎么回事?你要的是同一个回复中的两个内容?要做到这一点并不容易。您可能应该使用Ajax.Daniel—我在页面上有一个按钮,我希望它可以同时执行两个任务—将文件发送回用户,并使用新数据更新页面上的“div”部分。也许我在这里所建议的(同时使用2个请求)不是解决方案,但是关于如何获得正确的用户体验的任何想法都是很好的。哇,非常感谢您的回复!我想我至少需要2个回复。如何实现django中第三段所述内容?基本设计是,一旦收到初始登录页的请求,用户的客户端将启动另一个下载文件的请求,您将在登录页的响应中准备并提供一个URL,然后使用客户端JavaScript轮询或订阅该URL,以确定特定用户何时下载该文件,这样您就可以启动重定向。这就是它的要点。哇,非常感谢你的回复!我想我至少需要2个回复。如何实现django中第三段所述内容?基本设计是,一旦收到初始登录页的请求,用户的客户端将启动另一个下载文件的请求,您将在登录页的响应中准备并提供一个URL,然后使用客户端JavaScript轮询或订阅该URL到iden