私は、Djangoを使用してShopifyアプリに取り組んでいます。これは、nginxとgunicornを備えたVPSでホストしています。
Shopifyの アプリケーションプロキシ機能 を使用できるように、HttpResponseオブジェクトのContent-Typeをapplication/liquid
に変更しようとしていますが、機能していないようです。
私のコードの関連するセクションであると信じているものは次のとおりです。
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 によると、ヘッダーに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;
ドキュメントからの指示 に続いて、次のようになります。
# set content_type
response = HttpResponse("",
content_type="application/liquid; charset=utf-8")
# add content
response.write('<html>test123</html>')
お役に立てれば!
だからこれは私のために働いた:
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