一文教会你Flask模板

简介: 1.Jinja2模板引擎模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用一个名为Jinja2的强大模板引擎。


1.Jinja2模板引擎


模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用一个名为Jinja2的强大模板引擎。


基本的渲染模板


Flask在应用目录中的templates子目录里寻找模板,我们在模板目录里面新建一个index.html文件:


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>tt</title>
</head>
<body>
<h1>Hello , {{ name }}</h1>
</body>
</html>


在视图层编写如下代码,向模板中传入一个name值:


from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
    name = "dahe"
    return render_template('index.html', name = name)


访问主页如下:



模板中使用的{{ name }}结构表示一个变量,这是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取

Jinja2能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。下面是在模板中使用变量的一些示例:


<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>


变量的值可以使用过滤器修改。过滤器添加在变量名之后,二者之间以竖线分隔。例如,下述模板把name变量的值变成首字母大写的形式:


Hello, {{ name|capitalize }}


Jinja2提供的部分常用过滤器:😊



控制结构


Jinja2提供了多种控制结构,可用来改变模板的渲染流程

条件语句:


{% if name == 'admin' %}
    <h1>Hello , 管理员{{ name }}</h1>
{% else %}
    <h1>Hello , 用户{{ name }}</h1>
{% endif %}


循环语句:


<ul>
    {% for person in person_list %}
        <li>{{ person }}</li>
    {% endfor %}
</ul>


模板继承


创建一个名为base.html的基模板:


<html lang="zh-CN">
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <h1>IMUSTCTF</h1>
    {% block body %}
    {% endblock %}
</body>
</html>


在其他模板继承它:


{% extends "base.html" %}
{% block title %}
    主页
{% endblock %}
{% block body %}
    <h1>疲惫的身体</h1>
{% endblock %}


此时的页面:



2.自定义错误页面


Flask允许应用使用模板自定义错误页面。最常见的错误代码有两个: 404,客户端请求未知页面或路由时显示;500,应用有未处理的异常时显示


@app.errorhandler(404)
def page_not_found(e):
    return render_template('error/404.html'), 404


3.链接


在模板中直接编写简单路由的URL链接不难,但对于包含可变部分的动态路由,在模板中构建正确的URL就很困难了。而且,直接编写URL会对代码中定义的路由产生不必要的依赖关系。如果重新定义路由,模板中的链接可能会失效。


为了避免这些问题,Flask提供了url_for()辅助函数,它使用应用的URL映射中保存的信息生成URL。


例如,url_for('user', name='john', _external=True)的返回结果是http://localhost:5000/user/john


传给url_for()的关键字参数不仅限于动态路由中的参数,非动态的参数也会添加到查询字符串中。例如,url_for('user', name='john', page=2, version=1)的返回结果是/user/ john?page=2&version=1


4.静态文件


Web应用不是仅由Python代码和模板组成。多数应用还会使用静态文件,例如模板中HTML代码引用的图像、JavaScript源码文件和CSS


默认设置下,Flask在应用根目录中名为static的子目录中寻找静态文件。如果需要,可在static文件夹中使用子文件夹存放文件。服务器收到映射到static路由上的URL后,生成的响应包含文件系统中对应文件里的内容


例如:


{% block head %}
{{ super() }}
<link rel="shortcut icon" href="{{ url_for('static', filename='ico/favicon.ico') }}"
    type="image/x-icon">
{% endblock %}
目录
相关文章
|
1月前
|
Python
Flask 模板标签语言的使用
Flask 模板标签语言的使用
22 4
|
29天前
|
自然语言处理 Python
六、Flask模板使用方法
六、Flask模板使用方法
11 0
|
3月前
|
前端开发 Python
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
|
5月前
|
前端开发 JavaScript Python
flask实战-模板实现公共导航
在Flask中实现模板继承,创建基础模板`base.html`,包含公共导航菜单。子模板`movie-extends.html`继承`base.html`,并定义主要内容。视图函数`movie_extends_view`渲染`movie-extends.html`,显示电影列表。通过`extra_css`和`extra_js`块添加页面特定的样式和脚本,实现在`movie-extends.html`中应用自定义CSS样式。运行应用,访问http://127.0.0.1:1027/movie-extends,页面显示定制的电影列表样式。
86 2
|
6月前
|
Python
Flask中的模板的使用
Flask中的模板的使用
38 0
|
6月前
|
存储 移动开发 前端开发
Flask狼书笔记 | 03_模板
3 模板 模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用
58 0
|
6月前
|
开发框架 Python
Web 框架 Flask 快速入门(一)flask基础与模板
🌴 Flask基础和模板 1、web框架的作用 避免重复造轮子,app程序不必关心于服务器的沟通方式,而专注于核心的业务逻辑实现。 稳定,可扩展性强
106 0
|
JavaScript 前端开发 知识图谱
flask-模板用法
flask-模板用法
54 0
|
前端开发 JavaScript 数据处理
Flask之jinja2模板(一)
Flask之jinja2模板(一)
|
数据可视化 定位技术 Python
可视化 | 分享一套Flask+Pyecharts可视化模板
可视化 | 分享一套Flask+Pyecharts可视化模板