Estoy tratando de representar la trama generada por seaborn en la plantilla de Django.
Tengo el siguiente código en mi views.py:
def booking_hour_plot(): qs = bookings_today() df = read_frame(qs) plot = sns.countplot(data=df) return plot def render_stats_page(request): #general info user_count = total_users_until_now() cancel_rate = activity_cancel_rate() #activity/booking details activity_set = activities_today() booking_set = bookings_today() plot = booking_hour_plot() return render(request, "stats.html", {'name':'Avonmore Statistics', 'total_user':int(user_count), 'cancel_rate': round(float(cancel_rate), 2), 'booking_count_today': booking_set.count(), 'activity_count_today': activity_set.count(), 'activities_today': activity_set, 'bookings_today': booking_set, 'booking_hour_plot': plot, })Y tengo una plantilla html llamada stats.html que contiene la trama. El directorio de plantillas y views.py están en el mismo directorio:
<li>Real Time Plot: {{booking_hour_plot}}</li>Sin embargo, la página html renderizada no muestra realmente la trama. Es más como el objeto de la trama: ingrese la descripción de la imagen aquí
¿Alguna idea de cómo poner la trama real en la página html, en lugar de este objeto de trama?
Intente guardar y codificar su gráfico como archivo png , luego muéstrelo como una etiqueta de elemento <img> de esta manera:
from io import BytesIO import base64 def booking_hour_plot(): qs = bookings_today() df = read_frame(qs) plot = sns.countplot(data=df) plot_file = BytesIO() plot.savefig(plot_file, format='png') encoded_file - base64.b64encode(plot_file.getValue()) return encoded_file en stats.html :
<li>Real Time Plot: <img src='data:image/png;base64,{{booking_hour_plot}}'/></li>