08 flask模版 jinja2 传值,控制块,过滤器


模板的语法


1. 在模板中获取view中传递的变量值:{{ 变量名key }}

  render_template('模板网页名字',key=value,key=value)

可传递类型

  name = '沈凯'    # str
  age = 18          # int
  friends = ['建义', '陈璟', '小岳岳', '郭麒麟']                     # list
  dict1 = {'gift': '大手镯', 'gift1': '鲜花', 'gift2': '费列罗'}      # dict
  girlfriend = Girl('美美', '安徽阜阳')                                 # 自定义的类构建的类型:Girl对象

模板网页中或取传递的数据
  {{ list.0 }} 同 {{ list[0] }}
  {{ dict.key }} 同 {{ dict.get(key) }}
  {{ girl.name }} 同 {{ 对象.属性 }}

 

2. 控制块:

  {% if 条件 %}
    条件为True
  {% else %}
    条件为False
  {% endif %}

  =====================================
  {% for 变量 in 可迭代的对象 %}
    for循环要做的任务

  {% endfor %}

  =====================================

  for循环中可以使用loop变量
  loop.index 序号从1开始
  loop.index0 序号从0开始

  loop.revindex reverse 序号是倒着的
  loop.revindex0

  loop.first 布尔类型 是否是第一行
  loop.last 布尔类型 是否是第二行

  

{% for user in users %}
        <tr {% if loop.index == 3 %} style="background-color: deeppink" {% endif %}>
            <td> {{ loop.index }}</td>
            <td>{{ user.username }}</td>
            <td>{{ user.password }}</td>
            <td>{{ user.addr }}</td>
            <td>{{ user.phone }}</td>
        </tr>
    {% endfor %}

 

3.过滤器
过滤器的本质就是函数
模板语法中过滤器
  {{ 变量名 | 过滤器(*args) }}

  {{ 变量名 | 过滤器 }}

常见的过滤器
1. safe : 禁用转译
  msg = '<h1>520快乐!</h1>'
  return render_template('show_2.html', girls=girls, users=users, msg=msg)
  不想让其转译标签:
  {{ msg | safe }}


2. capitalize:单词的首字母大写
  {{ n1 | capitalize }}


3.lower和upper:大小写的转换

4.title 一句话中每个单词的首字母大写
  msg = 'She is a beautiful girl'
  {{ msg | title}}


5.reverse 翻转
  {{ n1 | reverse}}


6.format
  {{ '%s is %d years old' | format('lily',18) }}


7.truncate 字符串截断

 

list的操作
{# 列表过滤器的使用 #}
{{ girls | first }}            #列表第一个值
{{ girls | last }}            #列表最后一个值
{{ girls | length }}        #列表长度
{{ girls | sum }}           #整型列表求和 
{{ [1,3,5,7,9] | sum }}
{{ [1,8,5,7,3] | sort }}  #整形列表排序


dict:
{% for v in users.0.values() %} ---->获取值
  <p>{{ v }}</p>
{% endfor %}

<hr>
{% for k in users.0.keys() %} ----》获取键
  <p>{{ k }}</p>
{% endfor %}

<hr>

{% for k,v in users.0.items() %} ---》获取键值
  <p>{{ k }}---{{ v }}</p>
{% endfor %}

 

自定义过滤器两种方式(若和默认过滤器重名,会覆盖默认过滤器):

1.app.add_template_filter(函数名, '别名')

def replace_hello(value):                        #自定义一个替换字符串hello的过滤器
  value = value.replace('hello', '')
  return value.strip()                            # 必须将结果返回,strip()去除字符串两段空格


app.add_template_filter(replace_hello, 'replace')    #将函数定义为过滤器

模板中使用:{{ msg | replace }}


2.第二种方式 装饰器
@app.template_filter('listreverse')
def reverse_list(li):
  temp_li = list(li)
  temp_li.reverse()
  return temp_li

模板中使用:{{ li | listreverse }}

posted @ 2021-01-12 16:42  纸短情长lol  阅读(118)  评论(0编辑  收藏  举报