我正在尝试使用 pygal 和烧瓶创建一个简单的图表 Web 应用程序来绘制我存储在 mysql 数据库中的一些财务数据。数据库中的数据是分层的,我希望应用程序从层次结构的顶部开始,并允许用户通过简单地单击图表的相关部分来向下钻取。
我正在使用烧瓶来显示动态生成的 pygal 图表。
示例数据库数据:
guid | name | value | parentGuid | Description
------------------------------------------------
1234 | cat1 | 1 | null | Blah, blah
4567 | cat2 | 55 | null | asfdsa
8901 | cat3 | 22 | 1234 | asfdsa
5435 | cat4 | 3 | 8901 | afdsa
etc...
我使用 python + sql 向下钻取层次结构没有问题,但我很难过的是如何使用我的 pygal 图表中的链接向下钻取。
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
chart = graph_sub(request.form['guid'])
return render_template('Graph3.html', chart=chart)
else:
chart = graph_main()
return render_template('Graph3.html', chart=chart)
def graph_main():
""" render svg graph """
line_chart = pygal.HorizontalBar()
line_chart.title = 'Root Accounts'
RootAccts = GetRootAccounts() # Returns a list of lists containing accounts and account data.
for Acct in RootAccts:
line_chart.add({
'title': Acct[1], # Acct Name
'tooltip': Acct[4], # Acct description
'xlink': {'href': '/'} # Hyperlink that I want to pass POST data back to the form.
}, [{
'value': Acct[2]), # Acct Value
'label': Acct[4], # Acct Description
'xlink': {'href': '/'} # Hyperlink that I want to pass POST data back to the form.
}])
return line_chart.render()
def graph_sub(parentGuid):
### This works fine if I pass a parent GUID to it
### Now the question is how do I pass the guid to it from my pygal chart?
return line_chart.render()
所以当我点击嵌入在 pygal 图表中的链接时
'xlink': {'href': '/'}
如何使其重定向回同一页面并将所选帐户的 GUID 作为 POST 数据传递?还是有另一种不涉及POST的方法?
每次他们点击某些东西时页面都会重新加载,所以我希望尽可能简单地保持这一点,而不必涉及 ajax/java/etc ......尽管如果没有其他选项我愿意接受。
我还没有对其进行编码,但还会在页面中添加一些额外的表单控件,允许用户设置日期范围以控制显示的数据量。我计划使用 POST 来传递用户输入,但在我走得太远之前,我需要弄清楚如何管理这个基本功能。
想法?