我想做一些图像处理,但在此之前我想渲染图像。这是我尝试过的,但它不起作用。页面是空白的,没有错误,为什么?
class ImgThumbnail(DetailView):
queryset = Images.objects.all()
def render_to_response(self, context, **response_kwargs):
from PIL import Image
import requests
from io import BytesIO
response = requests.get('http://example.com/media/images/{}.jpg'.format(self.pk))
img = Image.open(BytesIO(response.content))
return HttpResponse(img, content_type='image/jpg')
答案 0 :(得分:2)
您应该使用StreamingHttpResponse
。用的方式如下:
(动态内容类型和内容长度为奖励)
try:
from cStringIO import StringIO
except ImportError:
from io import StringIO
from wsgiref.util import FileWrapper
from django.http import HttpResponse, StreamingHttpResponse
class ImgThumbnail(DetailView):
queryset = Images.objects.all()
def get(self, request, *args, **kwargs):
r = requests.get('http://example.com/media/images/{}.jpg'.format(self.pk))
if not r.status_code == 200:
return HttpResponse('', status=r.status_code)
wrapper = FileWrapper(StringIO(r.content))
response = StreamingHttpResponse(wrapper, content_type=r.headers.get('Content-Type'))
response['Content-Length'] = r.headers.get('Content-Length')
return response
答案 1 :(得分:0)
DetailView没有render_to_response
方法,因此定义自己的方法毫无意义。
无论如何,您还没有使用DetailView的任何功能。您应该从基础View类继承,并将代码放在get
方法中。