我正在使用Django的Shopify應用程序,我使用nginx和gunicorn在VPS上託管該應用程序。在Shopify App中設置Django HttpResponse對象的內容類型
我試圖將HttpResponse對象的內容類型更改爲application/liquid
,以便我可以使用Shopify的application proxy feature,但它似乎不工作。
以下是我認爲是我的代碼的相關章節:
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 docs,我應該爲了設置Content-Type
在頭設置response[''content_type]
。不幸的是,當我去到對應於views.py此功能的URL,我得到一個200響應,但內容類型沒有改變,內容長度爲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"
我如何可以改變響應的Content-Type的任何想法?這可能是我的nginx或gunicorn配置的問題嗎?
感謝您的幫助!
Matt,感謝您對nginx配置的提示!我一定會使用它。不幸的是,我已經嘗試了你的代碼建議,它返回一個411 Http錯誤(需要的長度)。嘗試在HttpResponse中將'length'或'Content-Length'的值指定爲參數導致Django錯誤(意外的關鍵字參數和關鍵字不能是表達式)。 – winter
好的,我已經更新了我的答案。 – Matt
'len(content)'應該是'len(content.encode('utf-8)' –