Flask 将 HTML 附加到静态服务文件

时间:2021-02-22 17:37:32

标签: python html flask

希望对于比我更有 Flask 经验的人来说,这将是一个简单的问题。我正在提供一个静态文件,我只想在其中附加一些 HTML,或者在一些文本下方提供该文件。有什么办法可以做到这一点,还是我以错误的方式接近它?

@app.route('/compile/<filename>')
def uploaded_file(filename):
    return *(Random HTML here)* + send_from_directory(app.config['UPLOAD_FOLDER'], filename)

我尝试的所有操作都会产生错误,我找不到其他任何处理此问题的方法。我想也许可以从 HTML 模板打印文件,但是当我尝试上传文件时它给了我一个错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

这个问题可以简化为

@route('/compile/<filename>')
def uploaded_file(filename):
    html_prefix = ...
    html_suffix = ...
    return html_prefix + content(filename) + html_suffix

获取内容的简单方法在哪里

def content(filename)
    with open(os.path.join(app.config['UPLOAD_FOLDER'], filename) as f:
        return f.read()

错误处理留作练习。如果您需要更改响应的 mimetype(或状态代码为 200 以外的其他内容),请参阅 https://flask.palletsprojects.com/en/1.1.x/quickstart/#about-responses

答案 1 :(得分:1)

我认为您正在寻找的可能是 iFramesend_from_directory 的组合。它用途广泛,易于使用,对我来说最有意义。

@app.route('/compile/<path:filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

@app.route('/compile/')
def compile():
    return render_template('compile.html')
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Compile</title>
  </head>
  <body>
    <iframe
      src="{{ url_for('uploaded_file', filename='example.txt') }}"
      style="border: 1px solid black; width:100%;"
      ></iframe>
  </body>
</html>