私はPythonでかなり新しくなっているので、これはすべて不必要で、よく知られているか、より良い方法があります。私は厄介なことをして何も見つけられなかったので、ここにいる。
最初に私が試したことは、pygal.util.mergextend()は他のデータ型が必要な文字列を見つけられないことです。 ConfigParser.read()._セクション[your_section_here]から返されたOrderedDictの値はすべて文字列なので、適切な型に変換する必要があります。
入力:ast.literal_eval()。
これはうまくいくようですが、タイプごとに文字列である__name__
のValueError( '不正な文字列')を引き上げています(オプション['__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"
...
app.py:
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())
...