跳转至

v0.6.0发布日志

发布时间:2023年3月17日

1 新增pyecharts2.0适配

django-echarts 0.6.0支持pycharts 2.0。 pyecharts2.0的主要变化有两点:

  • 第一,仓库地址变化和地图绘制变化,主要包括echarts及其扩展库、echarts主题文件、地图文件。参见 pyecharts-issue#2107
  • 第二,纯pyecharts代码变化,如新的图表类型、图表配置等。具体可参见 pyecharts 项目。此项工作由用户自行修改。

django-echarts 对远程仓库的处理如下:

django-echarts pyecharts版本 echarts 引用仓库 dms_repo 设置
0.5.x 1.9 4.8.0 pyecharts pyecharts 或 缺省
0.6.x 1.9 4.8.0 pyecharts pyecharts 或 缺省
2.0 5.4.1 pyecharts-v5 pyechartspyecharts-v5或 缺省

说明:

  • django-echarts 和 pyecharts 并无版本上的关联,只需要保证 pyecharts 和 echarts版本(仓库标识) 一致即可。
  • 为了简化配置,当 django-echarts0.6/pyecharts2.0,如果 dms_repo='pyecharts' (默认配置),将自动切换为 pyecharts-v5

2 仓库配置优化

单个依赖项设置支持批量配置。dep2url 字典key表示为仓库名称(需以#开头)。

DJANGO_ECHARTS = {
    'dep2url':{
        '#local': ['echarts', '中国']
    }
}

等效于

DJANGO_ECHARTS = {
    'dep2url':{
        'echarts':'#local',
        '中国':'#local'
    }
}

3 图表构建函数支持自定义参数

图表构建函数支持自定义参数,可以根据不同的输入值,加载不同的数据,从而形成多个图表。

以之前的时间轴图表为例子,每次只显示一个年份的数据图表。

@site_obj.register_chart(title='{year}年福建省家庭户类型组成')
def yearly_family(year: int):
    family_types = [
        '一人户', '二人户', '三人户', '四人户', '五人户', '六人户', '七人户', '八人户', '九人户', '十人及其以上'
    ]
    data = [
        [1982, 7.7, 8.2, 12.2, 17.1, 18.4, 14.7, 10.1, 11.6, 0, 0],
        [1990, 5.8, 8.6, 16.8, 23.6, 21.4, 11.8, 5.9, 2.9, 1.4, 1.8],
        [2000, 9.1, 15.5, 25.4, 24.7, 15.8, 5.9, 2.2, 0.8, 0.3, 0.3],
        [2010, 12.1, 17.2, 24.3, 21.7, 13.7, 6.4, 2.6, 1.1, 0.5, 0.4],
        [2020, 27.3, 26.3, 19.4, 14.2, 6.9, 4, 1.1, 0.4, 0.2, 0.2]
    ]
    yearly_data = {item[0]: item[1:] for item in data}
    if year not in yearly_data:
        raise ChartDoesNotExist(f'year={year}')
    year_data = yearly_data[year]
    bar = (
        Bar()
            .add_xaxis(family_types).add_yaxis('百分比(%)', year_data)
            .set_global_opts(title_opts=opts.TitleOpts("福建省家庭户类型构成-{}年".format(year)))
    )
    return bar

说明:

  • year为自定义参数,如未声明类型,默认为 str
  • 如果传入的year找不到对应的数据,抛出 ChartDoesNotExist 异常,web页面显示“找不到图表”的页面。
  • title参数可以使用类似 {year}的模板字符串。

该图表对应的相关引用配置如下(以year=2020例子):

项目 备注
图表URL /chart/year/2020/ 格式:<图表slug>/<参数名称1>/<参数值1>/...
python引用 reverse_lazy('dje_single_chart','yearly_family','year/2020/')
模板引用 {% url 'dje_single_chart' 'yearly_family', 'year/2020/' %}

4 重构自定义地图,支持geojson&svg

v0.6开始,新增 django_echarts.custom_maps 模块,原有的 django_echarts.geojson 标记为废弃状态。

将原有的 use_geojson 替换为 use_custom_map 即可。

chart = Map(...)
use_custom_map(chart, '中国省市地图', 'china_cities.geojson')

5 新增声明式导航栏配置

django-echarts 0.6 新增了使用字典方式一次性配置导航栏配置。

# site_config.py

nav_config = {
    'nav_left': ['home', 'list'],
    'nav_right': ['settings'],
    'nav_footer': [
        {'text': '项目主页', 'slug': 'project_url', 'url': 'https://github.com/kinegratii/django-echarts'}
    ]
}

# urls.py

site_obj.config_nav(nav_config)

相应的,DJESite类移除导航栏相关方法,可使用 DJESite.nav 相关方法。

  • DJESite.add_left_link
  • DJESite.add_right_link
  • DJESite.add_footer_link
  • DJESite.add_menu_item

6 ChartInfo和ChartInfoManager

  • ChartInfo 增加 is_bound 布尔值属性,如果对应图表注册函数携带任何参数,则设置为 False,数据格式化后变为True
  • ChartInfoManagerMixin.get_or_none 增加 uri 参数。
  • is_bound = False 情况下,body title description的转义处理

7 其他依赖库更新

typing_extensions 4.0 -> 4.5
borax 3.5 -> 4.0