flask学习笔记(四):利用render_template()渲染html

基础

render_template() 有什么用
在Python代码中 直接生成 HTML 缺点很多,比如笨拙,效率低,可读性差。因此, Flask 提供了 Jinja2 模板引擎来帮助开发者高效灵活生成HTML。
使用该方法可以渲染模板,你只要提供模板名称和需要作为参数传递给模板的变量就行了。

html模板文件的位置
模板即自己写好的模板html文件,需要放在 templates文件夹内。目录结构如下:

/application.py
/templates
    /hello.html

或者

/application
    /__init__.py
    /templates
        /hello.html

html模板文件的编写规则
Jinja2的详细使用见官方文档

实例1

利用 render_template(),我们可以优化一下flask学习笔记(二):文件浏览器+下载指定文件夹中的文件这个实例中的代码。即将html编写独立出来。修改后的代码如下:明显可读性更好了。

from flask import Flask, send_from_directory, render_template
import os

app = Flask(__name__)

root_dir = r'E:\Documents\test'

@app.route('/')
def index():
    files = os.listdir(root_dir)
    return render_template('files_list.html', files=files)

@app.route('/<filename>')
def download(filename):
    return send_from_directory(root_dir, filename)

app.run(debug=True)

</filename>

html模板文件 files_list.html代码如下:

<!doctype html>
<title>Download</title>
<h1>Directory listing</h1>
<hr>
<ul>
    {% for file in files %}
    <li><a href="{{file}}">{{file}}</a></li>
    {% endfor %}
</ul>

结果展示:效果一样。点击文件后可下载至本地。

flask学习笔记(四):利用render_template()渲染html

实例2

利用 render_template(),我们可以优化一下flask学习笔记(三):文件浏览器+下载指定文件夹中的文件(包含子文件夹)这个实例中的代码。即将html编写独立出来。修改后的代码如下:明显代码更简洁,可读性更好,也易扩展。

from flask import Flask, send_from_directory, render_template
import os

app = Flask(__name__)

root_dir = r'E:\temp\root_dir'

@app.route('/')
def index():
    files = os.listdir(root_dir)
    isdir_list = gen_isdir_list(root_dir)
    return render_template("files_list.html", files=files, isdir_list=isdir_list)

@app.route('/<path:sub_dir>')
def sub_dir1_page(sub_dir):
    dir_name = root_dir + '\\' + sub_dir
    files = os.listdir(dir_name)
    isdir_list = gen_isdir_list(dir_name)
    return render_template("files_list.html", files=files, isdir_list=isdir_list)

@app.route('/<path:sub_dir1>/<path:sub_dir2>')
def sub_dir2_page(sub_dir1, sub_dir2):
    dir_name = root_dir + '\\' + sub_dir1 + '\\' + sub_dir2
    files = os.listdir(dir_name)
    isdir_list = gen_isdir_list(dir_name)
    return render_template("files_list.html", files=files, isdir_list=isdir_list)

@app.route('/<filename>')
def download_root(filename):
    return send_from_directory(root_dir, filename)

@app.route('/<path:sub_dir>/<filename>')
def download_subdir1(sub_dir, filename):
    dir_name = root_dir + '\\' + sub_dir
    return send_from_directory(dir_name, filename)

@app.route('/<path:sub_dir1>/<path:sub_dir2>/<filename>')
def download_subdir2(sub_dir1, sub_dir2, filename):
    dir_name = root_dir + '\\' + sub_dir1 + '\\' + sub_dir2
    return send_from_directory(dir_name, filename)

def gen_isdir_list(dir_name):
    files = os.listdir(dir_name)
    isdir_list = []
    for f in files:
        if os.path.isdir(dir_name + '\\' + f):
            isdir_list.append(True)
        else:
            isdir_list.append(False)
    return isdir_list

app.run(debug=True)
</filename></path:sub_dir2></path:sub_dir1></filename></path:sub_dir></filename></path:sub_dir2></path:sub_dir1></path:sub_dir>

html模板文件 files_list.html代码如下:

<!doctype html>
<title>Download</title>
<h1>Directory listing</h1>
<hr>
<ul>
    {% for file in files %}
        {% if isdir_list[loop.index0] %}
            <li><a href="{{file + '\\'}}">{{file+ '\\'}}</a></li>
        {% else %}
            <li><a href="{{file}}">{{file}}</a></li>
        {% endif %}
    {% endfor %}
</ul>

结果展示:

flask学习笔记(四):利用render_template()渲染html
flask学习笔记(四):利用render_template()渲染html

flask学习笔记(四):利用render_template()渲染html

Original: https://blog.csdn.net/kaever/article/details/116312794
Author: 一从际发
Title: flask学习笔记(四):利用render_template()渲染html

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745899/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球