2016-06-14 4 views
0

Мой питон код получает файл с AWS s3 ведро как и тогда оказывается в шаблоне Джанго HTML следующих нормальных конвенций:Как отправить строку base64 в шаблон Django

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

Какова ценность 'print your_bytes'? –

+0

@ElwinArens большой base64 string –

+0

И что он печатает, если вы делаете 'print (type (your_bytes))'? –

ответ

0

Можете ли вы попытаться избежать содержимого «байтов»?

<html><body> 
    {{ otherdata }} 
    {{ bytes|force_escape }} 
</body></html> 

Обычно, если мне нужно, чтобы вернуть файл клиенту я либо перенаправить URL файла или просто вернуть JSON с URL внутри.

// 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) 
Смежные вопросы