FLASK模板学习笔记

本文详细介绍了Flask模板引擎的使用,包括默认配置、HTML转义、全局对象(如config、request、session等)、模板变量与标签、条件判断、循环控制、模板语法转义、过滤器的使用方法和自定义过滤器。此外,还讨论了模板全局函数如range、dict等,以及模板继承、宏和消息闪现等高级特性,帮助开发者更好地理解和运用Flask模板引擎。
摘要由CSDN通过智能技术生成

默认配置:

template_folder='templates' -----  模板的默认目录

render_template()   --------   (x)html自动转义

render_template_string()  ----    字符串自动转义

{% autoescape %} -------  手动设置是否转义

全局函数和辅助对象 -------  增强模板的功能

1.什么是转义

把有特殊意义的字符显示出来

html标签中的<>------&lt;&gt;

2.全局对象

config ----- Flask的配置信息

request -----  请求对象

session  -----  会话对象

g  ---------  请求相关的全局变量 (如:g.user)

url_for   --------  URL解析函数(如:静态文件地址解析、链接跳转地址解析)

get_flashed_messages()  ------------   会话消息

3.模板中变量的使用

  • {% ... %}用于语句  标签中可包含表达式
  • {{ ... }}用于表达式可以打印到模板输出
  • {# ... #}用于未包含在模板输出中的注释
  • # ... ##用于行语句

app.py中

@app.route('/index')
def index():
    age = 40
    money = 34
    return render_template('hello.html',age=age,money=money)

hello.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jianjia</title>
</head>
<body>
<p>我的年龄:{{ age }}</p>
<p>我的钱包:{{ money }}</p>
</body>
</html>

3.1模板标签内置判断条件

defined/undefined  -----  变量是否已经定义

none  -----   变量是否为None

number/string  -----  数字/字符串判断

even/odd   -----  奇偶判断

upper/lower   ---------   大小写判断 

3.2for循环体内的变量

变量描述
loop.index当前循环迭代的次数(从1开始)
loop.index0当前循环迭代的次数(从0开始)
loop.revindex到循环结束需要迭代的次数(从1开始)

loop.revindex0

到循环结束需要迭代的次数(从0开始)

在for循环中使用continue/break

在app.py中加入

app = Flask(__name__)
app.jinja_env.add_extension('jinja2.ext.loopcontrols')

for循环中奇偶行设置不同样式

<li class="{{ loop.cycle('odd','even') }}"></li>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jianjia</title>
</head>
<style>
    .odd{
        color: green;
    }
    .even{
        color: red;
    }
</style>
<body>

{% for k in user %}
    
{% if k%4==0 and k%100!=0 or k%400==0 %}

        <li class="{{ loop.cycle('odd','even') }}">{{ k }}年是闰年</li>

    {% else %}
        <li class="{{ loop.cycle('odd','even') }}">{{ k }}年不是闰年</li>
    </li>

{% endif %}

{% endfor %}
</ol>

</body>
</html>

3.3模板标签

设置变量,赋值操作,可以通过import导入

{% set key,value = (1,2) %}

使用with代码块,实现块级作用域

{% with %}

        {% set value = 42 %}

        {{value}} 只在代码块中有效

{% endwith %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jianjia</title>
</head>
<body>

<h3>赋值的使用</h3>
{% with %}
    {% set temp = 43 %}
    {{ temp }}

{% endwith %}
</body>
</html>

3.4模板语法的转义

  • 方式一:视为字符串    
  • 方式二:使用raw标签

{% raw %}

......

{% endraw %}

4.过滤器

过滤器,修改变量(如:格式化显示)

用管道符号(|)分割{{ name|striptags }} 

可以链式调用

可以用圆括号传递可选参数

4.1、过滤器的使用方式

方式一:用管道符号(|)

{{ value|safe }}

方式二:使用标签

{% filter upper %}

......

{% endfilter %}

4.2 内置过滤器

1.求绝对值:{{ value|abs }}

2.默认值显示: default(value,default_value="",boolean=False)

{{ value|default('默认值') }}

{{ value|d('默认值') }}

3.html转义:{{ value|escape }}或 {{ value | e}}

4.富文本内容转义显示:{{ value|safe }}

5.倒序显示:{{ value|reverse }}

4.3 自定义过滤器

方式一:使用装饰器注册

@app.template_filter('reverse')

def reverse_filter(s):

        return s[::-1]

方式二:调用函数注册

def reverse_filters(s):

        return s[::-1]

app.jinja_env.filters['reverse'] = reverse_filter

@app.template_filter('phone_format')
def phone_format(phone_num):
    """电话号码过滤器"""
    return phone_num[0:3]+ '****' + phone_num[7:]
<h3>自定义过滤器的使用</h3>
<p>{{ phone|phone_format }}</p>

5.模板全局函数

  • range([start],stop[step])
  • dict(**items)
  • cycler(*items) ----  可用于css类名的循环
  • joiner(stp=',') ---- 可用于字符串的拼接
  • url_for  ----- URL解析函数(如:静态文件地址解析、链接跳转地址解析)
<h3>cycler函数的使用</h3>
{% set class_name = cycler('row1','row2') %}
{% for i in range(100) %}
    <p class="{{ class_name.next() }}">{{ i }}</p>
{% endfor %}

<h3>url_for函数的使用</h3>
<!--req是函数名 -->
<a href="{{ url_for('req') }}">点我跳转</a>

6.模板中的宏

  • 把常用功能抽取出来,实现可重用
  • 简单理解:宏≈函数
  • 宏可以写在单独的html文件中
<h3>模板中的宏</h3>
{% macro input(name,type='text',value='') %}
    <div>
        <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
    </div>
{% endmacro %}

{{ input(name='username',value='admin') }}

6.1 文件中宏的使用

1.将前面定义的宏保存为forms.html

2.导入:

{% import 'forms.html' as forms %}

{% from 'forms.html' import input %}

3.使用:<p>{{ forms.input('username') }} </p>

7.模板的继承

步骤一:将可变的部分圈出来(base.html)     

  {% block content %}

                内容区域

        {% endblock %}

步骤二:继承父模板

{% extands 'base.html' %}

8.消息闪现

第一步:在视图中产生一个消息(提示/警告/错误)

flash(msg_content,msg_type)

参数msg_content:消息内容

参数msg_type:消息类型

第二步:在模板中展示消息

get_flashed_messages(category_filter=["error"])

参数category_filter:对产生的消息按类别查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值