使用Django自带Admin后台结合Echarts实现后台简单图表功能

最近在使用Django实现图表化功能时遇到了无法在后台生成图表的功能,在此记录下实现过程。

步骤如下:

1、在所要展示的类的model新建一个类,LZ的代码如下:

class ViewsByDayModel(ViewsByDay): # 父类为要展示的model类
    class Meta:
        proxy = True # 使用代理
        verbose_name = '每日浏览次数统计'
        verbose_name_plural = verbose_name

2、在admin.py里注册该类,重写changelist_view,并获取数据后台数据。

class ViewsByDayAdmin(ImportExportModelAdmin):
    list_filter = (
        'date',
    )
    change_list_template = 'admin/admin_test.html'

    def changelist_view(self, request, extra_context=None):
        response = super().changelist_view(
            request,
            extra_context=extra_context
        )

        try:
            qs = response.context_data['cl'].queryset
        except (AttributeError, KeyError):
            return response

        metrics = {
            'days': Sum('date'), # date是model累的字段
            'views_count': Sum('views_count'), # views_count是model累的字段
            'ip_count': Sum('ip_count'), # ip_count是model累的字段

        }
        response.context_data['date'] = list(
            qs
                .values('date')
                .annotate(**metrics)
        )

        return response

3、编写前台页面获取数据,加载echarts插件,做出图表。代码如下。

{% extends 'admin/change_list.html' %}
{% load staticfiles %}
{% block content_title %}
    <!-- ECharts单文件引入 -->
    <script src="{% static 'js/echarts.min.js' %}"></script>
    <script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
{% endblock %}

{% block result_list %}
    <a href="{% url 'viewsCount:views_export' %}" style="font-weight: bold; font-size: 20px;">导出成xls</a>
    <div id="mains" style="height:400px; width: 1000px;"></div>
    <script>
        let myChart = echarts.init(document.getElementById('mains'));
        let data1 = [];
        let data2 = [];
        let day = [];
        {% for i in date %}
            data1.push({{ i.views_count }});
            data2.push({{ i.ip_count }});
            day.push({{ i.days }});
        {% endfor %}

        myChart.setOption({
            toolbox: {
                show: true,
                feature: {
                    mark: {show: true},
                    dataView: {show: true, readOnly: false},
                    magicType: {show: true, type: ['line', 'bar']},
                    restore: {show: true},
                    saveAsImage: {show: true}
                }
            },
            calculable: true,

            title: {
                text: '网站每日浏览次数'
            },
            tooltip: {
                trigger: 'axis',
            },
            legend: {
                data: ['访问次数', 'ip数量']
            },

            xAxis: [
                {
                    type: 'category',
                    data: day
                }
            ],
            yAxis: [
                {
                    type: 'value',
                }
            ],

            series: [
                {
                    name: '访问次数',
                    type: 'bar',
                    data: data1,
                    markPoint: [
                        {type: 'max', name: '最大值'},
                        {type: 'min', name: '最小值'}
                    ]
                },
                {
                    name: 'ip数量',
                    type: 'bar',
                    data: data2,
                    markPoint: [
                        {type: 'max', name: '最大值'},
                        {type: 'min', name: '最小值'}
                    ]
                },
            ]
        });

    </script>

{% endblock %}

效果预览:

ps:页面中的倒叙日期,可以在

response.context_data['date'] = list(
    qs
        .values('date')
        .annotate(**metrics)
       
)

下添加语句 .order_by('date')实现正序输出。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django结合Echarts可以实现数据可视化的功能Echarts是一款基于JavaScript的数据可视化图表库,可以提供直观、生动、可交互、可个性化定制的数据可视化图表。在Django使用Echarts,一般的做法是将Echarts的JavaScript代码集成到Django的模板中,然后通过后台的数据传递给前端,实现数据的动态展示。 首先,你需要在Django项目中引入Echarts库。你可以通过在模板中引入Echarts的JavaScript文件,或者使用CDN的方式引入。可以参考Echarts官方网址https://echarts.apache.org/zh/index.html,官网上提供了丰富的示例和文档,可以为你提供更详细的信息和教程。 然后,你需要在Django中构建数据,并将其传递给前端页面。你可以在Django的视图函数中查询数据库或进行其他数据处理操作,然后将得到的数据传递给模板。在模板中,你可以使用Echarts的JavaScript代码,绑定数据和图表配置,生成相应的图表。可以使用Echarts提供的各种图表类型和配置项,根据你的需求进行个性化定制。 最后,在前端页面中展示Echarts图表。你可以在模板中使用HTML和JavaScript代码,将Echarts图表渲染到指定的div容器中。通过设置好的图表配置和绑定的数据,你可以实现数据可视化的效果。 总结一下,在Django结合Echarts的步骤大致是这样的:引入Echarts库,构建数据并传递给模板,使用Echarts的JavaScript代码生成图表,并在前端页面展示图表。希望这些信息可以帮助你在Django中成功使用Echarts实现数据可视化的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python中DjangoEcharts结合用法](https://blog.csdn.net/sabian2/article/details/122482400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值