【问题标题】:Flask python - werkzeug.routing.BuildError: Could not build url for endpointFlask python - werkzeug.routing.BuildError:无法为端点构建 url
【发布时间】:2021-05-25 09:25:43
【问题描述】:

我从网站下载输出文件时遇到问题。我正在使用 Flask 上传文件、处理它们、生成输出并下载文件。

您可以在下面看到我收到的错误:

似乎我没有传递文件名,但我不确定如何修复它。 任何帮助或建议将不胜感激。

flask.py 中与此问题相关的函数

UPLOAD_FOLDER = os.path.dirname(os.path.abspath(__file__)) + '/uploads/'

@app.route('/compare_content', methods=['GET', 'POST'])
def compare():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        files = request.files.getlist('file')
        files = [read_xlsx_binary(file) for file in files]
        df_old, df_new = files
        output_filename = run_compare_dfs(UPLOAD_FOLDER, df_old, df_new)

        return redirect(url_for('download_comparison', filename=request.args.get(output_filename)))
    return render_template('index.html', username=session['username'])


def read_xlsx_binary(file):
    filename = os.path.join(UPLOAD_FOLDER, file.filename)
    file.save(filename)
    df = pd.read_excel(filename, engine="openpyxl")
    # os.unlink(filename)
    return df


# Allow user to download the output that was generated by run_compare_dfs() function
@app.route('/uploads')
def download_comparison(filename):
    return send_from_directory(UPLOAD_FOLDER, request.args.get('filename'), as_attachment=True)

比较.py

def run_compare_dfs(upload_folder, df_old=None, df_new=None):

    if df_old is None or df_new is None:
        path_OLD = 'old.xlsx'
        path_NEW = 'new.xlsx'

        df_old = pd.read_excel(path_OLD, engine="openpyxl")
        df_new = pd.read_excel(path_NEW, engine="openpyxl")

        final_df = compare_dfs(df_old, df_new)
        output_filename = to_formatted_excel(upload_folder, final_df)
        return output_filename

【问题讨论】:

  • 检查output_filename的值。
  • @OlvinR​​oght 我不确定我是否理解你的意思。我正在使用 2 个主要函数比较 Excel 文件,比较比较数据帧的 dfs 和创建具有丰富字符串格式的 Excel 文件的 to_formatted_excel,file_name 如下所示:file_name = upload_folder + f'/Compared_DataFrames_{str_now}.xlsx'
  • 我的意思是检查函数输出。如果是None - 这可能会导致异常。
  • 现在 new.xlsx 和 old.xlsx 已正确上传到上传文件夹,但没有 Compare_DataFrames_.xlsx 文件,所以是的,你是对的

标签: python flask


【解决方案1】:

您可以通过更改以下代码来尝试吗 -
我还没有测试过,但它应该对你有用。

from flask import request


@app.route('/uploads')
def download_comparison():
    return send_from_directory(UPLOAD_FOLDER, request.args.get('filename'), as_attachment=True)

【讨论】:

  • 感谢您的回答,现在我收到此错误:TypeError: expected str, bytes or os.PathLike object, not NoneType
  • 您可能会在request.args.get('filename') 这个地方收到错误消息。请检查this answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多