Ошибка при отображении содержимого .csv в Django (бэкенд в S3 AWS)
У меня возникают проблемы при отображении в формате JSON содержимого .csv-файла, расположенного в S3 Bucket. Я могу правильно выполнить метод GET, но мне кажется, что я делаю что-то не так, когда пытаюсь отобразить содержимое ранее упомянутого файла.
Также я получаю эту ошибку: TemplateSyntaxError at /flightlogs Could not parse the remainder: '[file]' from 'csv_contents[file]'. Возможно, это связано с плохим кодом django html, но я не знаю, что еще можно сделать.
Текущий код Python выглядит так:
def flightlogs(request):
# configure boto3, this works
csv_files = []
try:
response = s3_client.list_objects_v2(Bucket=bucket_name)
for obj in response.get('Contents', []):
if obj['Key'].endswith('.csv'):
csv_files.append(obj['Key'])
except Exception as e:
print(f"Error al listar archivos en el bucket: {e}")
# this is for saving the content of the .csv
csv_contents = {}
# Itera sobre cada archivo CSV encontrado
for file_key in csv_files:
try:
# Obtiene el objeto (archivo) desde S3
obj = s3_client.get_object(Bucket=bucket_name, Key=file_key)
# Lee el contenido del archivo y lo decodifica como UTF-8
content = obj['Body'].read().decode('utf-8')
# Lee el contenido CSV y lo convierte en una lista de diccionarios
csv_reader = csv.DictReader(StringIO(content))
rows = list(csv_reader)
# Convierte la lista de diccionarios a JSON con formato indentado
csv_contents[file_key] = json.dumps(rows, indent=4)
except Exception as e:
# Manejo de errores en caso de problemas al leer un archivo CSV
print(f"Error al leer el archivo {file_key}: {e}")
csv_contents[file_key] = f"Error al leer el archivo: {e}"
# Renderiza el HTML con la lista de archivos y sus contenidos
return render(request, 'flight_logs_landing.html', {'csv_files': csv_files, 'csv_contents': csv_contents})
А текущий HTML-код таков:
{% extends "base.html" %}
{% load static %}
{% block content %}
<section class="section-sm" style="min-height: 100vh">
<div class="container">
<h1 class="mx-auto my-3 w-50 text-center">SAETA Flight Logs</h1>
<ul class="list-group">
{% for content in csv_contents %}
<li class="list-group-item">
<h2>{{ file }}</h2>
<pre>{{ csv_contents[file] }}</pre>
</li>
{% empty %}
<li class="list-group-item">No hay archivos CSV disponibles.</li>
{% endfor %}
</ul>
</div>
</section>
{% endblock %}