2

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

想法?

4

0 回答 0