首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否使用外部conf文件配置pygal图表?

是否使用外部conf文件配置pygal图表?
EN

Stack Overflow用户
提问于 2017-01-24 04:30:20
回答 1查看 69关注 0票数 0

我正在使用pygal来绘制我正在开发的web应用程序中的一些数据,我认为将图表的配置具体化会是一个好主意。

所以我在conf文件中写了一节,复制了我在conf代码中的代码:

代码语言:javascript
复制
[ChartOptions]
x_label_rotation: -75
x_labels_major_every: 5
show_minor_x_labels: False
range: (30,100)
stroke_style: {'width':8}
title: Chart Title

并发现将ChartOptions部分传递给(例如) pygal.Config()会导致

代码语言:javascript
复制
  File "/usr/local/lib/python2.7/dist-packages/pygal/util.py", line 370, in mergextend
    if list1 is None or _ellipsis not in list1:

我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 04:30:20

我是Python的新手,所以也许这一切都是不必要的,或者是众所周知的,或者存在更好的方法。我遇到了一堆麻烦,什么也找不到,所以我们就来了。

我发现的第一件事是pygal.util.mergextend()不喜欢在需要其他数据类型的地方查找字符串。从ConfigParser.read()._sectionsyour_section_here返回的OrderedDict中的值都是字符串,因此需要将它们转换为正确的类型。

输入: ast.literal_eval()。

这看起来似乎可以工作,但是在__name__值上一直引发一个ValueError(‘格式错误的字符串'),这是一个字符串,每种类型(选项’__name__‘)。好吧,现在怎么办?

我并不真正需要__name__值,所以我使用pop()将其从字典中删除,剩下的工作就是处理title值。我想要使用title,我知道每个pygal可以是一个字符串,并且可以控制它的值,那么能做什么呢?

ast.literal_eval()的文档坚持认为它允许字符串,因此在title文件中向conf值添加引号看起来是“合理的”,并且有效。

将所有这些放在一起,并将flask加入到混合中,我们得到:

conf文件:

代码语言:javascript
复制
...
[ChartOptions]
x_label_rotation: -75
x_labels_major_every: 5
show_minor_x_labels: False
range: (30,100)
stroke_style: {'width':8}
# note added quotes below
title: "Chart Title"
...

app.py:

代码语言:javascript
复制
import ConfigParser
import ast
import pygal
from pygal import Config
from flask import Flask, render_template
...
config = ConfigParser.ConfigParser()
config.read('my.conf')
chart_options = config._sections[CHART_SECTION]
chart_options.pop('__name__')
for key in chart_options.keys():
    chart_options[key] = ast.literal_eval(chart_options[key])

@app.route('/route')
def a_route():
    global chart_options # haven't made this into a class yet...
    chart_config = Config(**chart_options)

    chart = pygal.Line(chart_config)
    ...
    # add data and finalize chart setup
    ...
    return render_template('route.html', chart=chart.render())
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41815035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档