首页 > 解决方案 > Python Flask 提供 .htm 文件,可能吗?

问题描述

我是 Python 初学者。我有数百个要显示的静态 .htm 文件(不是 .html)。

对我来说最好的方法是什么?

非常感谢

from flask import Flask, redirect, url_for, render_template, request, session, flash, Response, jsonify

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hello'

@app.route('/view')
def view():
    return render_template("example.htm")


if __name__ == "__main__":
    app.run(debug=True)

标签: pythonhtmlflask

解决方案


如果你有数百个静态 .htm 文件,我想手动编写一个 Flask View 文件会非常非常乏味。:-(

幸运的是,您可以使用 Python 读取文件列表并为您编写更多 Python 代码和 View.py 文件!:-)

将以下代码放在与您的 HTM 文件相同的文件夹中的文件(例如)“view_builder.py”中,然后从该文件夹中的 cmd 提示符执行它:(python3 view_builder.py)

import glob
  
# start a file for the Flask Views    
view_file = open("view.py", "a")

# first write the View file header with Flask imports

fileline = "from flask import Flask, redirect, url_for, render_template, request, session, flash, Response, jsonify" + "\n\n"
view_file.write(fileline)
fileline = "app = Flask(__name__)" + "\n"
view_file.write(fileline)
fileline = "app.config['SECRET_KEY'] = 'hello'" + "\n"+ "\n"
view_file.write(fileline)

# assuming all views will have the same name as original HTM file

# filetype may be case sensitive?
for file in glob.glob("*.HTM"):
    # split file into filename and filetype
    fileparts = file.split('.')
    # build the app route and view def() with just the filename (no need for filetype)
    fileline = "@app.route('/" + fileparts[0] + "')" + "\n"
    view_file.write(fileline)
    fileline = "def " + fileparts[0] + "():" + "\n"
    view_file.write(fileline)
    # use the whole file name (with filetype) for the template file 
    fileline = "    return render_template('" + file + "')" + "\n"+ "\n"
    view_file.write(fileline)
    
# View.py file footer

fileline = 'if __name__ == "__main__":' + "\n"
view_file.write(fileline)
fileline = '    app.run(debug=True)' + "\n"
view_file.write(fileline)
view_file.close

推荐阅读