![](/img/trans.png)
[英]JsonResponse not setting content-type to application/json using django
[英]Setting Content-Type in Django HttpResponse object for Shopify App
我正在使用Django开发Shopify应用程序,我正在使用nginx和gunicorn在VPS上托管。
我正在尝试将HttpResponse对象的Content-Type更改为application/liquid
,以便我可以使用Shopify的应用程序代理功能 ,但它似乎不起作用。
以下是我认为是我的代码的相关部分:
from django.shortcuts import render_to_response, render
from django.http import HttpResponse
from django.template import RequestContext
import shopify
from shopify_app.decorators import shop_login_required
def featured(request):
response = HttpResponse()
response['content_type'] = 'application/liquid; charset=utf-8'
response['content'] = '<html>test123</html>'
response['Content-Length'] = len(response.content)
return response
根据Django文档 ,我应该设置response[''content_type]
以便在标题中设置Content-Type
。 不幸的是,当我在views.py中找到与此函数对应的URL时,我收到200响应,但Content-Type没有更改,Content-Length为0.这是我的响应头:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Jul 2013 12:26:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
X-Request-Id: 2170c81fb16d18fc9dc056780c6d92fd
content: <html>test123</html>
vary: Cookie
content_type: application/liquid; charset=utf-8
P3P: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
如果我将response['content_type']
更改为response['Content-Type']
,我会得到以下标题:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Jul 2013 12:34:09 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 3097
Connection: keep-alive
X-Request-Id: 76e67e04b753294a3c37c5c160b42bcb
vary: Accept-Encoding
status: 200 OK
x-shopid: 2217942
x-request-id: 6e63ef3a27091c73a9e3fdaa03cc28cb
x-ua-compatible: IE=Edge,chrome=1
p3p: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
content-encoding: gzip
P3P: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
关于如何更改响应的内容类型的任何想法? 这可能是我的nginx或gunicorn配置的问题?
谢谢你的帮助!
请尝试以下方法:
def featured(request):
content = '<html>test123</html>'
response = HttpResponse(content, content_type='application/liquid')
response['Content-Length'] = len(content)
return response
快速提示,您可以将其添加到NGINX配置的http
或server
块部分中,这样您就不必在视图和其他Django代码中指定编码:
charset utf-8;
charset_types text/css application/json text/plain application/liquid;
所以这对我有用:
def featured(request):
response = HttpResponse("", content_type="application/liquid; charset=utf-8")
response['Content-Length'] = len(content)
response.write('<html>test123</html>')
return response
谢谢,大家,求助!
只是为了扩展其他答案,如果HttpResponse
对象已经存在并且在实例化它之后需要设置其MIME类型(例如,在调用父方法时),则可以通过以下方式实现:
response = super(...) # This returns some HttpResponse object
response['Content-Type'] = "application/liquid"
return response
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.