【Flask】总结静态文件及渲染模板的使用

454 阅读2分钟

静态文件

动态的 web 应用同样需要静态文件。

CSSJavaScript 文件通常来源于此。

理想情况下,你的 web 服务器已经配置好为它们服务,然而在开发过程中 Flask 就能够做到。只要在你的包中或模块旁边创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。

给静态文件生成 URL ,使用特殊的 static 端点名:

url_for('static', filename='style.css')

这个文件是应该存储在文件系统上的 static/style.css


\

渲染模板

其实我一直都不太喜欢模板引擎这个概念,在越大型的项目中你的代码会变得越繁琐,我跟倾向于前后端分离

Python 中生成 HTML 并不好玩,实际上是相当繁琐的,因为你必须自行做好 HTML 转义以保持应用程序的安全。由于这个原因,Flask 自动为你配置好 Jinja2 模板

你可以使用方法 render_template() 来渲染模板

所有你需要做的就是提供模板的名称以及你想要作为关键字参数传入模板的变量。

如果你的如有文件长这样:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/hello/')
@app.route('/hello/<name>')
# 设置默认 name 为 None
def hello(name=None):  
    # 将 name 参数传递到模板变量中
    return render_template('hello.html', name=name)  

那么你的hello.html文件需要放置到 ./templates/下:

/application.py
/templates
    /hello.html

对于模板,你可以使用 Jinja2 模板的全部能力

详细信息查看官方的 Jinja2 Template Documentation

然后向 hello.html 模板文件中添加如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello From Flask</title>
</head>
<body>
    {% if name %}
        <!-- 如果 name 不为空则将 name 渲染出来 -->
        <h1>Hello {{ name }}!</h1>
    {% else %}
        <!-- 如果 name 为空则打印 Hello World! -->
        <h1>Hello World!</h1>
    {% endif %}
</body>
</html>

运行一下试试

export FLASK_APP=hello.py
export FLASK_ENV=development
export FLASK_DEBUG=1
flask run 

在模板中你也可以使用 requestsessiong 对象,也能使用函数 get_flashed_messages()

模板继承是十分有用的。如果想要知道模板继承如何工作的话,请阅读文档模板继承

基本的模板继承使得某些特定元素(如标题、导航和页脚)在每一页成为可能。

自动转义默认是开启的,因此如name包含 HTML,它将会自动转义。

如果你信任一个变量,并且你知道它是安全的(例如一个模块把 wiki 标记转换到 HTML ),你可以用Markup类或|safe过滤器在模板中标记它是安全的。 在 Jinja 2 文档中,你会见到更多例子。