Django 中 Pandas Dataframe 的分页
Pagination on Pandas Dataframe in Django
我在 Postgresql 中有数据并通过 ORM 查询将数据获取到我的名为 data 的数据框中,我的 view.py 如下所示:
view.py
from operator import index
from django.shortcuts import redirect, render
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.shortcuts import render
from bar_chart.models import AirQuality
from django.core.paginator import Paginator
#from django.views.generic import TemplateView
#from django.shortcuts import render
#from django.db.models import Sum
from django.db.models import Avg
from django.http import JsonResponse
from bar_chart.models import AirQuality
#from .models import *
import pandas as pd
# Create your views here.
def authenticate(request):
count= User.objects.count()
data= AirQuality.objects.all().values()
print(data)
df= pd.DataFrame(data)
df1= df.tail(10)
mydic = {
"df": df1.to_html()
#"count": count
}
return render(request, 'auth_home.html', context=mydic)
#, {'count':count}
我想在我的 auth_home.html 中呈现 pandas 数据框的那些页面(所有数据而不仅仅是数据的尾部)。在我的 pandas 数据帧上应用 Django 分页的出路(代码)是什么?
我能够按照 here 中关于分页的 django 文档解决我的问题。因为我在 postgresql 中有数据。因此,我制作了模型并通过在 div 中制作另一个 Table 来获取所有数据。因此,我编辑了我的 index.html 文件并从我的模型中导入了数据。下面一行
{% for contact in page_obj %}
是救命稻草,我用它包围了我的 table 并且我数据库中的所有行都已一一插入到我上面在 中创建的目标 table 中index.html .
我更新的index.html如下:
<div class="col">
<table class="table bg-white rounded shadow-sm table-hover">
<thead>
<tr>
<th scope="col" width="50">#</th>
<th scope="col">ID</th>
<th scope="col">Location</th>
<th scope="col">Carbon Monoxide (CO)</th>
<th scope="col">Nitrogen Oxide (NO)</th>
<th scope="col">Amonia (NH3)</th>
<th scope="col">Carbon Dioxide (CO2)</th>
<th scope="col">VOC</th>
<th scope="col">PM1</th>
<th scope="col">PM2</th>
<th scope="col">PM3</th>
<th scope="col">PM4</th>
<th scope="col">PM5</th>
<th scope="col">PM6</th>
<th scope="col">PM7</th>
<th scope="col">Created At</th>
<th scope="col">Updated At</th>
</tr>
</thead>
<tbody>
{% for contact in page_obj %}
<tr>
<th scope="row">1</th>
<td>{{ contact.id}}</td>
<td>{{ contact.loc}}</td>
<td>{{ contact.co}}</td>
<td>{{ contact.no2}}</td>
<td>{{ contact.nh3}}</td>
<td>{{ contact.co2}}</td>
<td>{{ contact.voc}}</td>
<td>{{ contact.pm1}}</td>
<td>{{ contact.pm2}}</td>
<td>{{ contact.pm3 }}</td>
<td>{{ contact.pm4 }}</td>
<td>{{ contact.pm5 }}</td>
<td>{{ contact.pm6 }}</td>
<td>{{ contact.pm7 }}</td>
<td>{{ contact.created_at }}</td>
<td>{{ contact.updated_at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
<div class = "card">
<h1>Pollution Sensor Latest Data</h1>
{{df|safe}}
</div>
</div>
我在 Postgresql 中有数据并通过 ORM 查询将数据获取到我的名为 data 的数据框中,我的 view.py 如下所示:
view.py
from operator import index
from django.shortcuts import redirect, render
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.shortcuts import render
from bar_chart.models import AirQuality
from django.core.paginator import Paginator
#from django.views.generic import TemplateView
#from django.shortcuts import render
#from django.db.models import Sum
from django.db.models import Avg
from django.http import JsonResponse
from bar_chart.models import AirQuality
#from .models import *
import pandas as pd
# Create your views here.
def authenticate(request):
count= User.objects.count()
data= AirQuality.objects.all().values()
print(data)
df= pd.DataFrame(data)
df1= df.tail(10)
mydic = {
"df": df1.to_html()
#"count": count
}
return render(request, 'auth_home.html', context=mydic)
#, {'count':count}
我想在我的 auth_home.html 中呈现 pandas 数据框的那些页面(所有数据而不仅仅是数据的尾部)。在我的 pandas 数据帧上应用 Django 分页的出路(代码)是什么?
我能够按照 here 中关于分页的 django 文档解决我的问题。因为我在 postgresql 中有数据。因此,我制作了模型并通过在 div 中制作另一个 Table 来获取所有数据。因此,我编辑了我的 index.html 文件并从我的模型中导入了数据。下面一行
{% for contact in page_obj %}
是救命稻草,我用它包围了我的 table 并且我数据库中的所有行都已一一插入到我上面在 中创建的目标 table 中index.html .
我更新的index.html如下:
<div class="col">
<table class="table bg-white rounded shadow-sm table-hover">
<thead>
<tr>
<th scope="col" width="50">#</th>
<th scope="col">ID</th>
<th scope="col">Location</th>
<th scope="col">Carbon Monoxide (CO)</th>
<th scope="col">Nitrogen Oxide (NO)</th>
<th scope="col">Amonia (NH3)</th>
<th scope="col">Carbon Dioxide (CO2)</th>
<th scope="col">VOC</th>
<th scope="col">PM1</th>
<th scope="col">PM2</th>
<th scope="col">PM3</th>
<th scope="col">PM4</th>
<th scope="col">PM5</th>
<th scope="col">PM6</th>
<th scope="col">PM7</th>
<th scope="col">Created At</th>
<th scope="col">Updated At</th>
</tr>
</thead>
<tbody>
{% for contact in page_obj %}
<tr>
<th scope="row">1</th>
<td>{{ contact.id}}</td>
<td>{{ contact.loc}}</td>
<td>{{ contact.co}}</td>
<td>{{ contact.no2}}</td>
<td>{{ contact.nh3}}</td>
<td>{{ contact.co2}}</td>
<td>{{ contact.voc}}</td>
<td>{{ contact.pm1}}</td>
<td>{{ contact.pm2}}</td>
<td>{{ contact.pm3 }}</td>
<td>{{ contact.pm4 }}</td>
<td>{{ contact.pm5 }}</td>
<td>{{ contact.pm6 }}</td>
<td>{{ contact.pm7 }}</td>
<td>{{ contact.created_at }}</td>
<td>{{ contact.updated_at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
<div class = "card">
<h1>Pollution Sensor Latest Data</h1>
{{df|safe}}
</div>
</div>