一个django应用程序,使用优秀的chart.js库绘制图表。

django-jchart的Python项目详细描述


#django jchart

[![构建状态](https://travis-ci.org/matthisk/django-jchart.svg?branch=master)(https://travis-ci.org/matthisk/django-jchart)[![覆盖状态](https://coveralls.io/repos/github/matthisk/django-jchart/badge.svg?branch=master)](https://coveralls.io/github/matthisk/django-jchart?分支=主)
[![PYPI版本](https://badge.fury.io/py/django jchart.svg)(https://badge.fury.io/py/django jchart)

此django应用程序允许您直接从django代码库配置和呈现图表。图表既可以直接呈现到django模板中,也可以异步提供给webbrowser。

-作者:matthisk heimensen
-许可证:bsd
-兼容性:django 1.5+,python2.7到python3.5
-项目URL:https://github.com/matthisk/django jchart


lt;p>;
启用模板加载通过将以下属性添加到您的<;i>;模板<;i>;django配置,从应用程序文件夹中删除:
<;p>;

<;pre>;<;code class="language python">;模板=[
{
"后端":"django.template.backends.django.django templates"、
"应用程序目录":真的,

}
<;/code>;
<;h4 class="Section Title"id="Docs FrontEnd Deps">;
<;a class="Fragment Link"ref="\Docs FrontEnd Deps">;
前端依赖关系要在浏览器中呈现的图表需要包含chart.js库。在结束前添加以下
html<;code>;<;body&;gt;<;code>;标记:
<;p>;

<;pre>;<;code class="language html">;<;script src="https://cdnjs.cloudflare.com/ajax/libs/chart.js/2.4.0/chart.bundle.min.js">;<;script&;gt;<;。/代码>;


<;p>;
如果要使用异步加载图表,还需要包含jquery:
<;/p>;
<;代码class="language html">;<;脚本src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"<;script&;gt;<;code>;<;pre>;


<;h4 class="section title"id="docs chart objects">;
<;a class="fragment link"href="docs chart objects">;
<;a>;
<;/h4>;


<;p>;
此图表库的核心是"图表"类。此类描述图表并定义应显示哪些数据。图表的"类字段"映射到"图表配置"选项,该选项描述图表应如何呈现和表现。通过重写"图表"实例上的"获取数据集"方法,可以定义应显示的数据。
<;/p>;

<;p>;
<;p>;
<;p>;
若要定义要呈现的图表类型(如折线图或条形图),图表类应d将其类字段<;代码>;图表类型<;代码>;设置为"线条"、"条形图"、"雷达图"、"北极星"、"扇形图"或"气泡图"之一。没有此字段的图表类无效,初始化将导致<;代码>;配置不正确<;代码>;异常。
<;p>;

<;pre>;<;代码class="language python">;来自jchart import chart

class linechart(chart):
图表类型='line'<;。/代码>;<;/pre>;

<;h5 class="section title"id="docs get datasets">;
<;a class="fragment link"ref="\docs-get-datasets">;
获取数据集
<;/a>;
<;/h5>;

<;p>;
<;code>;获取数据集<;/code>;方法应返回此图表应显示的数据集列表。其中,数据集是具有键/值配置对的字典(请参见chart.js<;a href="http://www.chartjs.org/docs/折线图数据集结构">;文档<;/a>;)。
<;/p>;

<;pre>;<;code class="language python">;来自jchart导入图表echart(图表):
图表类型=行


<;a class="fragment link"href="docs get labels">;
获取标签
<;a>;
<;/h5>;

<;p>;
此方法允许您设置chart.js<;code>;data.labels<;/code>;参数。它允许您配置分类轴。有关如何使用此功能的示例,请参阅jchart import chart中的<;a href="饼图">;饼图<;
<;p>;

<;pre>;<;code class="language python">;


类饼图(图表):
图表类型='pie'

def获取标签(self,**kwargs):。
返回['red','blue']<;/code>;<;/pre>;

<;h4 class="section title"id="docs configuring charts">;
<;a class="fragment link"href="docs configuring charts">;
<;/a>;
<;/h4>;

<;p>;
a c哈特可以通过以下类字段进行配置:
<;p>;

<;p>;
<;代码>;缩放<;代码>;
<;代码>;布局<;代码>;
<;代码>;标题<;代码>;
<;代码>;图例<;代码>;
<;代码>;工具提示s<;/code>;
<;code>;悬停<;/code>;
<;code>;动画<;/code>;
<;code>;元素<;/code>;
<;code>;响应<;/code>;
<;/p>;

<;p>;
所有这些字段都映射到图表中的同一个键。js<;a href="http://www.chartjs.org/docs/chart-configuration-creating-a-chart-with-options">;"选项"对象<;/a>;。例如,如果要创建不响应呈现的图表,则会将响应类字段设置为false:
<;/p>;

<;pre>;<;code class="language python">;来自jchart import chart


class unresponsivelinechart(chart):
chart\u type='line'
responsive=false
…<;/code>;<;/pre>;

<;p>;
这些类字段中的大多数都需要一个索引列表或字典。除了应为布尔值的<;code>;responsible<;/code>;。请务必阅读chart.js<;a href="http://www.chartjs.org/docs/chart configuration common chart configuration">;文档<;/a>;了解如何使用这些配置选项。
<;/p>;

<;p>;
为方便起见,<;code>;jc中提供了一些方法hart.config<;/code>;,可用于生成正确的字典以配置chart.js属性。这些方法中的大多数只作为输入配置的验证步骤,但有些方法还可以转换它们的输入。让我们看一个例子,如何配置X轴以使其不显示:
<;/p>;

<;pre>;<;code class="language python">;来自jchart import chart
from jchart.config import axes

class linechart(chart):
chart\u type='line'
scales={
'xaxes':[轴(display=false)],
}<;/code>;

<;p>;
<;code>;jchart.config<;code>;还包含创建数据集配置字典的方法。使用此方法的优点之一是它包含一个特殊属性<;code>;color<;/code>;,可用于自动设置"backgroundcolor"、"pointbackgroundcolor"、"bordercolor"、"pointbordercolor"和"pointstrokecor"的值。
<;/p>;

<;pre>;<;code class="language python">;来自jchart import chart
来自jchart.config import axes


类线图(chart):
图表类型='line'


定义获取数据集(self,**kwargs):
返回[数据集(color=(255,255,255),data=[])<;/code>;

<;p>;
<;code>;jchart.config<;code>;模块包含用于下列属性的方法。请记住,您没有义务使用这些方法,您也可以提供python字典来代替这些方法调用。

<;h5>;可用的配置方法:<;h5>;
<;代码>;轴<;代码>;、<;代码>;缩放标签<;代码>;、<;代码>;勾选<;代码>;、<;代码>;数据集<;代码>;、<;代码>;工具提示<;代码>;、<;代码>;图例<;代码>;、<;代码>;LegendLabel<;代码>;、<;代码>;标题<;代码>;、<;代码>;悬停<;代码>;、<;代码>;交互模式<;代码>;、<;代码>;动画<;。>;,<;代码>;元素<;代码>;,<;代码>;元素弧<;代码>;,<;代码>;元素线<;代码>;,<;代码>;元素点<;代码>;<;代码>;元素矩形<;代码>;
<;p>;

<;p>;
<;h5>;自定义配置选项<;h5>;
e是另一个名为"选项"的特殊类字段,它必须设置为字典,并可用于设置任何其他chart.js配置值,这些值不能通过预定义的类字段(例如<;code>;MaintainAspectratio<;code>;)进行配置。类字段的优先级高于通过"选项"词典应用的任何配置。
={
"MaintainAspectratio":正确的
}
……
<;/pre>;

<;h4 class="Section Title"id="Docs Rendering Charts">;
<;a class="Fragment Link"ref="\docs Rendering Charts">;
<;/a>;
<;/h4>;。

<;p>;
可以将图表实例传递到Django模板上下文。
在模板内部,您可以在
图表实例上调用方法"as-html"来呈现图表。
<;p>;

<;pre>;<;code class="language python">;\linechart是一个类继承自jchart.chart

定义一些视图(请求):
呈现(请求,'template.html',{
'折线图':折线图(),
})<;/code>;<;/pre>;

<;p>;
下面的代码是如何在html t中呈现折线图的示例雇佣:
<;/p>;

<;pre>;<;code class="Language Python">;&;&123;&;&123;line&u chart.as廑html&;&125;<;/code>;<;/pre>;

<;h4 class="section title"id="docs asynchronous charts">;
<;a class="fragment link"href=""docs asynchronous-图表">;
异步图表
<;/a>;
<;/h4>;

<;p>;
将图表直接呈现到HTML模板中时,该页的HTTP请求将传输图表所需的所有数据。也可以异步加载图表(及其所需的数据)。
<;/p>;

<;p>;
为此,我们需要设置一个url端点,从该端点加载图表的数据。<;代码>上有一个ClassMethod;jchart.view s.chart view<;/code>;自动创建在http get请求中将图表的配置数据公开为json的视图:
<;/p>;

<;pre>;<;code class="language python">;来自jchart。views导入chartview

line chart是继承自jchart的类。chart
line chart=linechart()

urlpatterns=[
url(r'^图表/折线图/$',chartView.from廑图表(折线图),name='折线图',
]<;/code>;<;/pre>;

<;p>;
您可以使用django模板中的自定义templateTag异步加载此图表。自定义标记的行为类似于django url templatetag,提供给它的任何位置或关键字参数都用于解析给定url名称的url。在本例中,url不需要解析任何url参数

><;p>;

<;pre>;
<;pre>;lt;code class="language python">;{&;37;加载j chart&;37;}


>{&;&;37;渲染图'折线图'折线图'折线图&;37;}

<;lt;<;code>;<;pre>;


<;p<;p<;lt;lt;lt;lt;lt;lt;lt;<;lt;lt;lt;lt;lt;p>;<>;
此标记将扩展为以下Js/html代码:
<;/p>;

<;pre>;<;/canvas&;gt;

<;script type="text/javascript">;
window.addEventListener("domContentLoaded",function(){
$.get('/charts/line\chart/',函数(配置){
var ctx=document.getelementbyid("唯一图表id").getcontext("2d");


新图表(ctx,配置);
};
});
<;/脚本&;gt;<;/代码>;<;/pre>;

<;h4 class="section title"id="docs chart parametalization">;
<;a class="fragment link"ref="文档图表参数化"在">;
图表参数化
<;/a>;
<;/h4>;

<;p>;
对于不同的数据集重复使用同一图表通常很有用。这可以通过子类化现有图表类并重写其"获取数据集"方法来完成。但还有另一种方法。为<;code>;as-html<;/code>;方法提供的任何参数都将提供给<;code>;get-u datasets<;/code>;方法。这使得参数化"获取数据集"的输出成为可能,让我们看一个例子。假设我们将价格点数据存储在名为"价格"的模型中,而此模型有一个名为"货币类型"的字段。通过接受此字段的值作为"获取数据集"的参数,我们可以呈现不同货币类型的图表。
<;/p>;

<;pre>;来自core.models导入价格

class price chart(图表):
图表类型=行

def获取数据集(自身,货币类型):
价格=价格。对象。筛选器(货币类型=货币类型)

data=[{'x:price.date,"y":price.point}表示价格中的价格]

return[dataset(data=data)]<;/code>;<;/pre>;

<;p>;
如果我们将此图表的实例提供给模板的上下文,则可以使用它呈现两个不同的图表。这是通过使用<;code>;render\u图表<;lt;lt;code>;模板标记来为<;lt;code>;获取数据集<;lt;code>;方法提供其他参数来完成的,方法是:
< lt;lt;code>;lt;lt;lt;lt;lt;gt;lt;lt;p>;
<;br/><;p>;
<;br/><;p>;
<;lt;lt;lt;code>;lt;pre>;lt;code class="language python">;{&;&;&;37;render\u-chart-chart-price&;&;&;37;渲染"美元"37;}<;/code>;<;/pre>;

<;p>;
对于异步图表,任何url参数都传递给<;code>;获取数据集<;/code>;方法。
<;/p>;

<;pre>;<;code class="language python">;从jchart导入c视图hartview
从.charts导入price chart

price\chart=pricechart()

urlpatterns=[
url(r'^currency\u chart/(?p<;>;\w+/$',
chartView.from_chart(price_chart))
]<;/code>;<;/pre>;

<;p>;
要异步呈现此图表,我们必须提供url参数作为<;code>;render_chart<;/code>;模板标记的第二个参数,如下所示:
<;/p>;

<;pre>;<;code class="language pytho"{&;37;加载jchart&;37;}

{&;37;绘制"价格图""欧元区价格图"和"欧元区价格图"的


{&;37;绘制"价格图""价格图""美元价格图"&;37;}<;<;>;<;pre>;


























<<<
todo

*可组合的数据源(而不必依赖继承)
*将django jchart与其他django chartig进行比较











\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\发布

*要发布"setup.py"中包版本的更新,
*将发布添加到"changelog.md"中。
*运行命令:

```
python setup.pypython sdist bdist-bdist-du-wheel-universal
wine upload-twine-upload-dist/


```

*add git tag to commit

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有字符串的java JNA调用与带有字节[]的java JNA调用的行为不同   java基于键列表获取子映射   重启后永久增加java堆大小?   JavaHTTPS服务器:相互SSL身份验证   java为什么接受接口的方法会拒绝该接口的实现?   片段中的java视图无法应用于()   ms access Java SQL更新命令不工作   java将web服务自动打包和部署到Oracle Application Server 10g   java有没有办法在安卓 studio中为安卓时钟设置多个警报?   位于FTP服务器上的文件上的Java校验和md5   在Java中创建类时遇到问题。有些方法不太确定   java错误:在类chrome\u驱动程序中找不到主方法   通用海图(Javascript\Java)