深圳企业网站制作制作,给境外网站网站做代理,学技术的培训学校,山西网站建设适合v加xtdseo文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中#xff0c;视图函数返回的HTML数据往往需要根据相应的变量#xff08;比如查询参数#xff09;动态生成。当HT… 文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中视图函数返回的HTML数据往往需要根据相应的变量比如查询参数动态生成。当HTML代码保存到单独的文件中时我们没法再使用字符串格式化或拼接字符串的方式在HTML代码中插入变量这时我们需要模板引擎我们可以在HTML文件中使用特殊的语法来标记变量这类包含固定内容和动态部分的可重用文件称为模板。模板引擎的作用就是读取并执行模板中的特殊语法标记并根据传入的数据将变量替换为实际值输出最终的HTML页面这个过程就叫做渲染。flask默认使用的模板引擎是Jinja2他是一个功能齐全的Python模板引擎。 一、模板基本用法
1.1 定界符
语句比如if判断、for循环等。{%.....%}表达式比如字符串变量等。{{....}}注释{#....#}
1.2 模板语法
Jinja2提供了多种控制结构来控制模板的输出其中for和if是最常用的两种。
if 控制结构
{% if user.bio %}
h1hahha/h1
{% else %}
h1wuwuwu/h1
{% endif %}for 控制结构
{% for item in items %}
li{{item.e}}/li
{% endfor %}常用的循环变量
变量名说明loop.index当前迭代数从1开始loop.index()当前迭代数从0开始loop.revindex当前反向迭代数从1开始loop.revindex()当前反向迭代数从0开始loop.first如果是第一次迭代则为 True否则为 False。loop.last如果是最后一次迭代则为 True否则为 False。loop.length被迭代的对象的长度
1.3 渲染模板
render_template()函数
from flask import Flask, render_templateapp Flask(__name__)app.route(/)
def index():data {title: Welcome to My Website,content: This is some content for the page.}return render_template(index.html, **data)render_template_string()函数
from flask import Flask, render_template_stringapp Flask(__name__)app.route(/)
def index():data {title: Welcome to My Website,content: This is some content for the page.}template_string h1{{ title }}/h1p{{ content }}/preturn render_template_string(template_string, **data)二、模板辅助工具
2.1 上下文
在模板上下文里包含很多变量其中包括手动传和自动传的变量除了这些之外我们可以通过set标签在模板里创建变量。
{% set variable_name expression %}也可以将一系列模版定义为变量使用set和endset定义开始和结束。
{% set template_header %}h1Welcome to My Website/h1
{% endset %}{% set template_content %}pThis is some content for the page./p
{% endset %}div{{ template_header }}
/divdiv{{ template_content }}
/div
内置上下文变量
标准模板全局变量
变量说明config当前的配置对象request当前的请求对象在已激活的请求环境下可用session当前的会话对象在已激活的请求环境下可用g与请求绑定的全局变量在已激活的请求环境下使用
自定义上下文
注册模板上下文处理函数
# flask提供了app.context_processor装饰器可以用来注册模板上下文处理函数它可以帮我们完成统一传入变量的工作。
app.context_processor
def inject_foo():foo I am folo.return dict(foofoo)当我们调用render_template()函数渲染任意一个模板时所有使用app.context_processor装饰器注册的模板上下文处理函数都会被执行这些函数的返回值会被添加到模板中因此我们可以直接在模板中使用foo变量。
2.2 全局对象
内置全局函数
全局函数说明url_for(endpoint, **values)生成指定端点endpoint对应的 URL url_for(index, page2)static(filename)生成静态文件的 URL static(styles.css)get_flashed_messages(with_categoriesFalse, category_filter[])用于获取闪现消息如果没有指定参数它将返回所有闪现消息的列表。可以通过 with_categoriesTrue 来返回带有分类信息的闪现消息或者通过 category_filter 来仅返回特定分类的闪现消息range()与python range函数用法一致limsum(n5, htmlTrue, min20, max100)生成随机文本
自定义全局函数
# 定义一个自定义的全局函数
app.template_global()
def double(x):return x * 22.3 过滤器
过滤器用于对变量进行处理和转换从而实现一些常见的格式化操作。
内置过滤器
过滤器说明safe将文本标记为安全告诉模板引擎不要对其进行转义。例如{{ my_html_text|safe }}。default如果变量不存在或为空则使用给定的默认值。striptags移除字符串中的 HTML 或 XML 标签。trim去除字符串两侧的空白字符。title将字符串中每个单词的首字母转换为大写。capitalize将字符串中的第一个字符转换为大写其他字符转换为小写。lower将字符串转换为小写。upper将字符串转换为大写。
自定义过滤器
app.template_filter()
def musical(s):return s*10# 模板使用
{{name | musical}}2.4 测试器
测试器用于对变量进行逻辑判断和类型检查从而实现一些常见的条件判断操作。
内置测试器
测试器说明odd判断一个数值是否为奇数。even判断一个数值是否为偶数。defined判断一个变量是否已定义。none判断一个变量是否为 None。divisibleby判断一个数值是否可以被给定的数整除。string判断一个变量是否为字符串类型。
自定义测试器
# 定义一个自定义测试器
def is_even(value):return value % 2 0# 将自定义测试器注册到模板环境中
app.template_test(is_even)# 模板使用
{% if number is even %}2.5 模板环境对象
在jinja2中渲染行为都由jinja2.Environment类控制所有的配置选项、上下文变量、全局函数、过滤器和测试器都存储在Environment实例上。 app.jinja_env.globals: 这是一个字典包含全局变量在所有模板中都可用。你可以将自定义的全局变量添加到这个字典中以便在模板中使用。 app.jinja_env.filters: 这是一个字典包含过滤器函数。过滤器函数可以在模板中用于对变量进行处理和转换例如格式化日期、截取字符串等。你可以将自定义的过滤器函数添加到这个字典中。 app.jinja_env.tests: 这是一个字典包含测试函数。测试函数用于在模板中进行条件判断例如检查变量是否为真、是否为列表等。你可以将自定义的测试函数添加到这个字典中。 app.jinja_env.globals.update(): 这是一个方法用于批量添加全局变量。你可以传入一个字典作为参数其中包含要添加的全局变量及其值。 app.jinja_env.get_template(template_name): 这是一个方法用于获取指定名称的模板。你可以使用这个方法加载模板并对其进行渲染。 app.jinja_env.from_string(template_string): 这是一个方法用于根据给定的模板字符串创建一个模板对象。你可以使用这个方法动态创建模板而无需从文件中加载。
通过操作模板环境对象你可以定制模板的行为、添加自定义函数和过滤器、设置全局变量等。这使得你可以更灵活地控制模板的渲染过程并实现一些高级功能。