Показывать тип string на веб-странице Django вместо байтов?

Я пытаюсь получить содержимое XML-файла, хранящегося в ведре S3, для отображения в виде текста в браузере. Однако оно отображается в виде чисел (байтов), а не разборчивой строки.

Мой код (views.py):

def file_content(request):
    file_buffer = io.BytesIO()
    s3_client = boto3.client("s3", "eu-west-1")
    s3_client.download_fileobj("mybucket", "myfolder/example.xml", file_buffer)
    file_content = file_buffer.getvalue()
    return HttpResponse(file_content)

Что я пробовал

Я пробовал изменить эту строку:

file_content = file_buffer.getvalue()

To:

file_content = file_buffer.getvalue().decode("utf-8")

Ор:

file_content = str(file_buffer.getvalue())

Но в браузере он по-прежнему отображается как числа/байты. Содержимое файла правильно отображается как строка при использовании print() или если я проверяю type(file_content) в консоли, но в браузере этого не происходит.

Я не уверен, что идет не так, если кто-то может указать мне правильное направление, я был бы очень признателен. Спасибо.

До, я исправил это, добавив content_type к HttpResponse, так что моя функция теперь выглядит следующим образом:

def file_content(request):
    file_buffer = io.BytesIO()
    s3_client = boto3.client("s3", "eu-west-1")
    s3_client.download_fileobj("mybucket", "myfolder/example.xml", file_buffer)
    file_content = file_buffer.getvalue().decode('UTF-8')
    response = HttpResponse(content_type="text/plain")
    response.write(file_content)
    return response
Вернуться на верх