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



希望这对比我更有Flask经验的人来说是一个容易的问题。我正在提供一个静态文件,我只是想向它附加一些HTML,或者在一些文本下面提供文件。有什么方法可以做到这一点,或者我的方法是错误的?

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

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

这个问题可以简化为

@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()

错误处理是一个练习。如果需要更改响应的mime类型(或将状态码更改为200以外的内容),请参见https://flask.palletsprojects.com/en/1.1.x/quickstart/#about-responses

我认为您正在寻找的可能是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>

最新更新