Pygal - 点击栏并发布数据?

时间:2016-06-01 22:22:47

标签: python html flask html-form pygal

我正在尝试使用pygal和flask创建一个简单的图表Web应用程序来绘制我存储在mysql数据库中的一些财务数据。数据库中的数据是分层的,我希望应用程序从层次结构的顶部开始,并允许用户只需单击图表的相关部分即可向下钻取。

我正在使用flask来显示动态生成的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来传递用户输入,但在我走得太远之前,我需要弄清楚如何管理这个基本功能。

思想?

0 个答案:

没有答案