用外部conf文件配置pygal图表?

2024-04-30 01:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pygal在我正在开发的web应用程序中绘制一些数据,并认为将图表的配置外部化是一个好主意。你知道吗

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

[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.配置()导致

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

我该怎么做?你知道吗


Tags: 文件数据代码inweb应用程序labelsconf
1条回答
网友
1楼 · 发布于 2024-04-30 01:32:58

我对Python还比较陌生,所以也许这一切都是不必要的,是众所周知的,或者存在更好的方法。我遇到了很多麻烦,什么也找不到,所以我们来了。你知道吗

我首先想到的是pygal.util.mergextend文件()不喜欢在需要其他数据类型的地方查找字符串。OrderedDict中的值返回自ConfigParser.read文件()。\u节[此处的\u节\u]都是字符串,因此需要将它们转换为正确的类型。你知道吗

输入:评估(). 你知道吗

这似乎是可行的,但是不断在__name__值上引发ValueError('malformed string'),该值是每个类型的str(options['__name__'])。好吧,现在怎么办?你知道吗

我其实并不需要__name__值,所以我使用pop()将其从字典中删除,这样就可以继续处理title值。我想使用title,知道每个pygal可以是一个字符串,并且可以控制它的值,那么可以做什么呢?你知道吗

ast.literal_eval()的文档坚持认为它允许字符串,因此在conf文件中为title值添加引号似乎是“合理的”,而且是有效的。你知道吗

把所有这些放在一起,把烧瓶加到混合物中,我们得到:

conf文件:

...
[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"
...

你知道吗应用程序类型地址:

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())
...

相关问题 更多 >