0

我正在努力在烧瓶中复制一个 tkinter 接口。我有使用“to_html()”在页面上显示的熊猫数据框。我使用了[本教程][1]。但我需要创建按钮来下载数据框。

创建和下载数据帧的函数位于其自己的目录“/testmodule”中的自定义模块中。下载数据帧的函数与创建和显示数据帧的函数是分开的。

下面是 testmodule.py 的示例代码:

import pandas as pd
from Flask import render_template
def df_test():
    df1 = pd.DataFrame(
        {
        'terms' : ['term1','term2'],
        'code1': ['1234x', '4321y'],
        'code2': ['2345x','5432y'],
        'code3': ['3456x','6543y']
        }
        )
    df2 = pd.DataFrame(
         {
        'name': ['Dan','Sara','Conroy'],
        'rate': ['3','3.5','5.2'],
        'location': ['FL','OH','NM'],
        'code': ['4444g','6543y','2345x']                           
         })
    return render_template('view.html',tables=[df1.to_html(classes='female'), df2.to_html(classes='male')],
    titles = ['na', 'Codes', 'People'])

def download_df():
    output_file = 'codes_people.xlsx'
    writer = pd.ExcelWriter(output_file, engine='xlsxwriter')
    df1.to_excel(writer, sheet_name="Codes")
    df2.to_excel(writer, sheet_name="People")
    workbook  = writer.book
    worksheet1 = writer.sheets['Codes']
    worksheet2 = writer.sheets['People']
    writer.save()

我已经尝试为下载编写一个路由,但是得到了未定义数据帧值的错误,我理解,因为我正在导入一个对 download_df 的函数调用,与创建 dfs 的函数分开。我只是不知道如何将 df1 和 df2 的值从第一个函数传递到第二个函数中,一旦它位于 routes.py

我将有一些按钮,允许下载从现有 2 的列中制作的新 dfs。

按钮是否可以从模板本身调用下载函数(download_df),或者只能通过在 routes.py 中设置函数来完成?如果 routes.py,我如何将 df 变量传递给路由?或者,我需要创建一个临时文件吗?

[1]:https ://sarahleejane.github.io/learning/python/2015/08/09/simple-tables-in-webapps-using-flask-and-pandas-with-python.html/ \

4

1 回答 1

0

最终的工作是将文件创建命令与数据帧一起包含在第一个视图中,然后设置会话变量以将输出文件的文件名传递给下载视图。

def df_test():
    df1 = pd.DataFrame(
        {
        'terms' : ['term1','term2'],
        'code1': ['1234x', '4321y'],
        'code2': ['2345x','5432y'],
        'code3': ['3456x','6543y']
        }
        )
    df2 = pd.DataFrame(
         {
        'name': ['Dan','Sara','Conroy'],
        'rate': ['3','3.5','5.2'],
        'location': ['FL','OH','NM'],
        'code': ['4444g','6543y','2345x']                           
         })
    writer = pd.ExcelWriter(output_file, engine='xlsxwriter')
    df1.to_excel(writer, sheet_name="Codes")
    df2.to_excel(writer, sheet_name="People")
    workbook  = writer.book
    worksheet1 = writer.sheets['Codes']
    worksheet2 = writer.sheets['People']
    writer.save()
    return render_template('view.html',tables=[df1.to_html(classes='female'), df2.to_html(classes='male')],
    titles = ['na', 'Codes', 'People'])
    output_file = 'codes_people.xlsx'

    session['otpt_file'] = 'tmp/' + output_file


def download_df():
    output_file = session.get('otpt_file', None)
    #return output_file
    return send_file(output_file, attachment_filename='output.xlsx', as_attachment=True,mimetype='text/xlsx')
于 2018-01-22T19:31:46.713 回答