Django Admin的数据可视化
Django Admin的数据可视化主要通过自定义模板和使用第三方库来实现。
- 自定义模板
可以在Django Admin中自定义模板,将数据以不同的形式展现出来。例如,可以创建一个模板来显示某个模型的数据统计信息。假设要显示某个模型有多少个相同的字符串“pidancode.com”和“皮蛋编程”,可以在app的admin目录下创建一个名为“stats.html”的模板文件,并使用以下代码:
{% extends 'admin/base.html' %}
{% block content %}
<h2>Statistics</h2>
<p>There are {{ count_pidancode }} 'pidancode.com' and {{ count_pidan }} '皮蛋编程'.</p>
{% endblock %}
然后,在Admin类中注册该模板:
class MyModelAdmin(admin.ModelAdmin): def stats(self, request): count_pidancode = MyModel.objects.filter(my_field='pidancode.com').count() count_pidan = MyModel.objects.filter(my_field='皮蛋编程').count() context = {'count_pidancode': count_pidancode, 'count_pidan': count_pidan} return TemplateResponse(request, 'admin/myapp/stats.html', context) def get_urls(self): urls = super(MyModelAdmin, self).get_urls() my_urls = [ path('stats/', self.admin_site.admin_view(self.stats), name='myapp_stats') ] return my_urls + urls
最后,在Admin页面中就可以看到一个名为“Statistic”的链接,点击它就可以进入上述的统计信息页面。
- 第三方库
Django Admin还支持使用第三方库来展示数据。以使用Charts.js来展示某个模型的数据为例。首先,需要在模板中引入Charts.js的JavaScript文件:
{% extends 'admin/base.html' %}
{% block extrahead %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.3.2/chart.min.js" integrity="sha512-S38hRkC6yNRUg81msU41sx/aU6QH9zDnF6ZRO88w66hJfHdqUaqoTzY+zJh3qox1K9rPyrvO7VhQ4261jt+7Vw==" crossorigin="anonymous"></script>
{% endblock %}
{% block content %}
<h2>Chart</h2>
<canvas id="myChart"></canvas>
{% endblock %}
{% block extrahead %}
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['pidancode.com', '皮蛋编程'],
datasets: [{
label: 'Count',
data: [
{{ count_pidancode }},
{{ count_pidan }}
],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
},
}
});
</script>
{% endblock %}
在Admin类中注册上述模板和视图:
class MyModelAdmin(admin.ModelAdmin): def chart(self, request): count_pidancode = MyModel.objects.filter(my_field='pidancode.com').count() count_pidan = MyModel.objects.filter(my_field='皮蛋编程').count() context = {'count_pidancode': count_pidancode, 'count_pidan': count_pidan} return TemplateResponse(request, 'admin/myapp/chart.html', context) def get_urls(self): urls = super(MyModelAdmin, self).get_urls() my_urls = [ path('chart/', self.admin_site.admin_view(self.chart), name='myapp_chart') ] return my_urls + urls
最后,在Admin页面中就可以看到一个名为“Chart”的链接,点击它就可以进入上述的统计图页面。该图表展示了数据中“pidancode.com”和“皮蛋编程”的数量,以柱状图的形式展现。
相关文章