flask-admin章节一:使用chartkick画报表
一般中小型WEB整体来看逻辑比较简单些,一般都是基于数据库的增删改查。不过通过数据库查询到的记录直接展示给用户不是很直观,大家其实蛮期待有一个报表
直接展示他们期待的内容。
这块就涉及到数据的提取和展示,数据的提取就不需要过多涉及了,就是一些不同的SQL查询。
数据的展示,就需要有各种开源javascript库的支持。毕竟自己去写一套图表展示javascript库是不太现实的,需要投入太多的经历,而且开源里也有很多实现。
开源实现报表功能的javascript库还是蛮多的,不过我比较推荐使用chartkick。不仅能够完全满足要求,而且相当简洁,使用起来比较方便。
关于chartkick的介绍大家可以看下http://chartkick.com/。
在flask admin中的使用
页面编辑
在flask admin中使用chartkick还是蛮简单的:
{% extends 'admin/master.html' %}
{% block tail %}
{{ super() }}
<script src="{{ url_for('static', filename='coverage/jquery.min.js') }}"></script>
<script src="{{ url_for('static', filename='highcharts.js') }}"></script>
<script src="{{ url_for('static', filename='chartkick/js/chartkick.js') }}"></script>
{% line_chart data with style="width:200px; height:20px;" %}
{% endblock %}
上述代码中extends和block语句大家可以忽略掉,是jinja2的模板,这块会稍微介绍下它的功能。
{% extends 'admin/master.html' %}
这行语句的作用是集成master.html jinja2模板,对于想对外提供统一视图的WEB来说把基本的框架放到一个基本的jinja2模板中,所以其他的HTML继承这个模板是相关管用的。
{% block tail %}
这行语句的作用是继承admin/master.html模板中的tail blcok。关于extends和block语句的介绍大家可以参阅:http://docs.jinkan.org/docs/jinja2/
真正起作用的是:
<script src="{{ url_for('static', filename='coverage/jquery.min.js') }}"></script>
<script src="{{ url_for('static', filename='highcharts.js') }}"></script>
<script src="{{ url_for('static', filename='chartkick/js/chartkick.js') }}"></script>
{% line_chart data with style="width:200px; height:20px;" %}
这四行语句,前三行比较好理解:就是导入JavaScript库,对于url_for语句大家可能不是很熟悉。对于上面例子,就直接理解为是在static目录下导入这些文件。
真正画图标的就是最后一条语句,相当简洁,而且也特别方便。上面画的是线性图表,对于其他各种类型的图标,chartkick也提供了对应的支持,使用同上面一样简洁。
flask admin application渲染页面
在flask admin中渲染页面也是非常简单,对于flask admin只需要提供如下代码就可以了:
@app.route('/')
def index():
data = {}
# 增加自己想要展示的数据
return render_teaplate('chartkick.html', data=data)
出现的问题
真正这么使用,发现页面并没有渲染出来,而且还一直报错。报这样的错误:
{% line_chart data with style="width:200px; height:20px;" %}
TemplateSyntaxError: Encountered unknown tag 'line_chart'. Jinja was looking for the following tags: 'endblock'. The innermost block that needs to be closed is 'block'.
然后大家就会很费解,怎么会出现这样的错误啊。我明明所有的JavaScript库都导入了啊,并且代码也跟官网上面的例子一模一样。
无论怎么确定就是没有问题,但是就是始终报错。
如何拍错
对于这种情况下,你就应该冷静下来想想。对于line_chart语句,你会发现跟jinja2的模板语句类似,而且上面报错也出现了Jinja相关的字眼。这个时候,你大可以怀疑下line_chart具体是什么。
查询下chartkick库的代码,你会出现line_chart其实是注册到jinja2模板中的函数:
from ..template import CHART_HTML
from ..options import Options register = template.Library()
register.tag('line_chart', functools.partial(chart, 'LineChart'))
但这个并不是jinja2系统自带的,在使用的时候直接导入可以了。
所以,在定义在定义app的下面增加以下语句就可以了:
app = Flask(__name__)
app.jinja_env.add_extension("chartkick.ext.charts")
小结
chartkick还是蛮强大的,使用好chartkick会给WEB图表展示带来意想不到的效果。
flask-admin章节一:使用chartkick画报表的更多相关文章
- 【python系列】python画报表(Chartkick、Flask)(附中文乱码解决方式)
chartkick 能够画 javascript 报表, 并且比較美观.可是网上搜了下.非常难找到 python 版本号的,于是查了些资料,摸索了下. 对 Flask 也不非常熟悉,这里就仅仅抛砖引玉 ...
- flask admin学习记录
flask admin是flask框架中一个非常好用的后台管理框架,但是由于文档内容太少,经常遇到问题无法解决,这里记录一下 一简单的使用 from flask import Flask from f ...
- Flask admin Flask login 整合模板
项目地址: https://github.com/WES6/supflask Flask admin 官方文档: https://flask-admin.readthedocs.io/en/lates ...
- 画报表框架——Echarts.js
官网:http://echarts.baidu.com/index.html ————————————————————————————————— 先看看我做的第一个柱状图形报表 ——————————— ...
- flask-admin章节四:flask session的使用
1. 关于session flask session可能很多人根本都没有使用过,倒是cookie大家可能使用得比较多.flask cookie使用起来比较简单,就两个函数,读取和设置. 具体使用方式如 ...
- flask-admin章节五:wtforms FormField超级炫酷使用
1. 概述 查看wtforms代码树fields目录的core.py,会发现在文件开头有这样的语句: __all__ = ( 'BooleanField', 'DecimalField', 'Date ...
- flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
概述 flask admin可以支持自定义视图,对于涉及到比较复杂的视图可以选择继承flask_admin.BaseView来定义自己期待的结构. 自定义的视图的每个函数可以使用flask_admin ...
- C#制作RDLC报表
报表以前我只做过水晶报表,但是最近发现家里的VS上面居然没有水晶报表,发现水晶报表现在貌似已经不能完全免费的使用了,为了保险起见,就用了VS自带的RDLC报表,用完感觉其实也是够用的嘛~ 建立一RDL ...
- BIRT使用1:简介、概念、元素、报表设计器组成
前一篇博客对birt进行了一个初探,相信通过上篇博客大家对birt有个初步认识,接下来我们随着下面这张思维导图的展示,进入birt的使用学习. 这一篇博客是第一部分,主要介绍一下birt的简介.概念. ...
随机推荐
- 14.S5PV210串行通信编程实战
1.整个程序流程分析(1)整个串口通信相关程序包含2部分:uart_init负责初始化串口,uart_putc负责发送一个字节2.串口控制器初始化关键步骤(1)初始化串口的Tx和Rx引脚所对应的GPI ...
- python之GUI编程(二)win10 64位 pygame的安装
pygame的下载网址: http://www.pygame.org/download.shtml 我下载了第一个 很显然,安装的时候出现了如图中的尴尬,更改了安装目录后,在Python shell中 ...
- 运行R 报错R cannot R_TempDir, 继而发现/dev/mapper/VG00-LV01 磁盘空间已满
今天在运行R脚本的时候报了个错:Fatal error: cannot create 'R_TempDir'.排除了是自己写的代码的问题,想着应该是某个没见过的原因,google之,发现网上的说法是/ ...
- [Nginx] 在Linux下的启动、停止和重加载
Nginx的启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c参数指定配置文件路径. Nginx的停止 ...
- 关于context:component-scan配置中use-default-filters参数的作用
参考了多篇文章都说明了use-default-filters参数的基本用途,但有些主要点没有说到,这里补充记录下: <context:component-scan base-package=&q ...
- CVPR 2007 Learning to detect a salient object
Dataset: MSRA A&B are introduced in this paper. A conditional Random Field based method was prop ...
- [转载]我的WCF之旅(1):创建一个简单的WCF程序
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- CSS3常用选择器(三)
在CSS3的选择器中,除了结构性伪类选择器外,还有一种UI元素状态伪类选择器.这些选择器的共同特征: 指定的样式只有当元素处于某种状态时才起作用,在默认状态下不起作用. 1.hover.focus.a ...
- Net分布式系统之五:C#使用Redis集群缓存
本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层. 一.背景 系统考虑到高并发的使用场景.对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决.对于系统高并发查询,为了提供性能减 ...
- TextView实现歌词同步
利用TextView实现歌词同步显示,这是一个简单的利用TextView实现滚动实时显示歌词的. 里面的内容都已经写上了详细的注释.里面播放音乐的时候歌词同步展示. 做媒体这块的朋友可以学习一下,练练 ...