我的python代码从aws s3存储桶中获取一个文件,然后按照常规约定在django html模板中呈现:
context_dict = {}
conn = S3Connection(djangoSettings.AWS_ACCESS_KEY_ID, djangoSettings.AWS_SECRET_ACCESS_KEY)
b = conn.get_bucket(djangoSettings.AWS_STORAGE_BUCKET_NAME)
k = Key(b)
k.key = 'Myfile.png'
your_bytes = k.get_contents_as_string(headers={'Range' : 'bytes=0-100000'},encoding="base64")
print your_bytes
context_dict['bytes'] = your_bytes
context_dict['otherdata'] = "otherdata"
return render(request, 'webapp/index.html', context_dict)
当我print your_bytes
时,它会在显示我的Django服务器数据的终端中打印字节。但是当我尝试访问我的Django模板中的字节时就像没有发生任何事情一样:
<html><body>
{{ otherdata }}
{{ bytes }}
</body></html>
bytes
只打印otherdata
呈现正常。
总结如何在没有冲突的情况下将基本64字符串发送到我的django模板? 或者这是一种将文件发送给客户端的愚蠢方式? 如果是这样,最合适的方法是什么?
答案 0 :(得分:0)
你能尝试逃避“字节”的内容吗?
<html><body>
{{ otherdata }}
{{ bytes|force_escape }}
</body></html>
通常,如果我需要将文件返回给客户端,我会重定向文件的url,或者只是简单地返回带有url的json。
// write file to /media/s3/my-file.jpg
// option1 - redirect
return redirect('/media/s3/my-file.jpg')
// or
// option2
response_data = {
'fileUrl': '/media/s3/my-file.jpg',
}
// Pre-Django 1.7
return HttpResponse(json.dumps(response_data), content_type="application/json")
// For Django 1.7+
from django.http import JsonResponse
return JsonResponse(response_data)