Как отобразить элементы из датафрейма в html ОТДЕЛЬНО с помощью django?
Я использую Django и использую следующую структуру для базы данных:
class Main(models.Model):
date = models.DateTimeField(default=datetime.datetime.now())
timestamp = models.DateTimeField(auto_now_add=True)
main_title = models.CharField(max_length=100)
title = models.CharField(max_length=100)
changeover_time = models.FloatField()
cycle_time = models.FloatField()
available_time = models.FloatField()
FPY = models.FloatField()
class Meta:
ordering = [Lower('title')]
def __str__(self):
return self.title
--
В моем VIEWS у меня есть следующий код:
def home(request):
item = Main.objects.all().values()
df = pd.DataFrame(data=item)
df_gb = df.groupby(['title']).agg(
{'cycle_time': 'mean'})
mydict = {
"df": df_gb.to_html()
}
return render(request, 'teste.html', context=mydict)
--
В моем Html шаблоне (teste.html) у меня есть следующий код:
{% extends 'base.html' %}
{% load static %}
{% block 'body' %}
<ul class="list-group">
<li class="list-group-item">C/O: <span class="badge bg-primary rounded-pill">{{df|safe}}
</ul>
{% endblock %}
-- Результаты :
C/O:
cycle_time
title
Product Conference 2.0
Product Descharging 7.0
Storing 1.0
Typing 3.5
buying 3.0
--
Отображает все средние значения, используя все данные из моей базы данных, фильтруя по названиям. работает нормально
Но мне нужно отобразить в html средние значения ОТДЕЛЬНО, а не все вместе.
Something like:
C/O = 2.0
C/O = 7.0
C/O = 1.0
C/O = 3.5
C/O = 3.0
Я уже пробовал использовать FOR и не могу отобразить эти значения изолированно в моем HTML .
--
{% extends 'base.html' %}
{% load static %}
{% block 'body' %}
{% for i in df %}
<ul class="list-group">
<li class="list-group-item">C/O: <span class="badge bg-primary rounded-pill">{{i.title}}
</span></li>
</ul>
{% endfor %}
{% endblock %}
-- Не работает
Может ли кто-нибудь мне помочь?
Спасибо
Я предполагаю, что это происходит потому, что вы передаете фрейм данных. Вам нужно преобразовать данные в список и передать его в словарь. Я привожу пример, где датафрейм преобразуется в список: df['time'].values. 'bboard' заменить на название вашего приложения.
views.py
import pandas as pd
def home(request):
df_gb = pd.DataFrame({'time': [1, 2, 3, 4, 5, 1, 2, 3, 4]})
context = {'df': df_gb['time'].values}
return render(request, 'bboard/rank_templ.html', context)
templates(rank_templ.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
</head>
<body>
{% for i in df %}
<ul class="list-group">
<li class="list-group-item">C/O: <span class="badge bg-primary rounded-pill">{{i}}
</span></li>
</ul>
{% endfor %}
</body>
</html>
Выход