인공지능, 머신러닝/Django + DataScience
[Django prac][weather graph] 4. View에서 Template으로 이미지 전달하기
bay07
2024. 4. 5. 17:27
▷ View에서 Template으로 이미지 전달하기
View에서 Template으로 이미지 형식의 데이터를 직접 전달할 수 없다.
그래서 저장된 이미지의 경로를 전달하여
Template에서 출력해야한다.
지금은 matplotlib 그래프를 이미지의 형식으로 버퍼에 저장한 후
그 지정된 경로를 전달할 것이다.
* 버퍼 (buffer)
데이터를 임시로 저장하는 공간
# myapps > vies.py
from django.shortcuts import render
import matplotlib.pyplot as plt
import pandas as pd
# io : 입출력 연산을 위한 Python 표준 라이브러리
# BytesIO : 이진 데이터를 다루기 위한 버퍼를 제공
from io import BytesIO
# 텍스트 <-> 이진 데이터를 변환할 수 있는 모듈
import base64
def index(request):
x = [1, 2, 3, 4]
y = [2, 4, 6, 8]
plt.plot(x, y)
plt.title("test graph")
plt.xlabel('x label')
plt.ylabel('y label')
buffer = BytesIO()
# buffer 에 그래프를 png 형태로 저장
plt.savefig(buffer, format='png')
# 버퍼의 내용을 인코딩
img_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8').replace('\n', '')
# 터미널에서 디버깅을 위해선 print 도 가능
# print(img_base64)
buffer.close()
# ----- csv 파일 읽어오기
csv_path = 'austin_weather.csv'
df = pd.read_csv(csv_path)
context = {
# 이미지 경로
# 'img_base64': img_base64,
'image': f'data:image/png;base64, {img_base64}',
'df': df,
}
return render(request, "index.html", context)