Flask Jinja2模板

Jinja 模板

模板语言(templationg language)中会把变量传递给模板。在Jinja中变量名是由变量代码块(variable block){{}}来表示的,另外还有控制代码块(control block){% %}

过滤器

因为很多python的函数在jinjia中不可以使用,所以jinjia中有很多内建的函数
内置过滤器

过滤器 解释 例子 结果
default 如果变量是None则返回默认值 {{ var default(‘str’) }}
escape 把HTML标签转义 {{ “name” escape }}
safe 与escape相反,不转义HTML
float 以浮点数显示 {{ 10 float }}
init 以整形显示 {{ 10.1 int }}
join 拼贴字符串 {{ [‘a’,’b’] join(‘,’) }}
length len() {{ “ab” length }}
round 四舍五入(common,floor,ceil) {{ 10.11 round(1, “common”) }}
title 大写首字母 {{ “name is” title }}
tojson 转化为json
truncate 截断字符串,并添加省略号 {{ “aaaaaaaaaa” truncate(4) }}

自定义过滤器
在mian函数中定义相关的函数,并添加到jinja_env对象的filter字典中

注释

{# #}中的代码不会被渲染

渲染模板

from flask import Flask, render_template
@app.route('/user/')
def user(name):
    return render_template('user.html', name=name)
名,之后的都是键值对,表示传入模板的变量

模板传参

1.模板参数
直接嵌套在html里面,传入的是该路由定义方法里面的参数

{{ argv }}

模板变量过滤器

过滤器的最大作用就是处理含有标签的字符串,jinja2会转义所有的变量,比如\

{% if title %}
... 
{% else %}
...
{% endif %}
...

过滤器也可以同if语句一起使用

{% if str | length >0 %}
{% endif %}

3.循环语句

{% for name in names %}
...
{% endfor %}

循环也可以同if语句一起使用

{% for name in names if name | length >0 %}
...
{% endfor %}

loop
loop是在循环中的一个特殊变量,可以查看循环的相关信息

{% for name in names %}
    {{ loop.index }}. {{name}} #显示迭代次数
{% endfor %}
变量 描述
loop.index 当前迭代序号,从1开始
loop.index0 当前迭代序号,从0开始
loop.revindex 当前迭代逆序号,从1开始
loop.revindex0 当前迭代逆序号,从0开始
loop.first 如果是第1个,则返回True
loop.last 如果是最后1个,返回True
loop.length 返回迭代器的长度
loop.cycle 迭代辅助函数
loop.depth 递归循环的深度,从1开始
loop.depth0 递归循环的深度,从0开始

4.模板继承
被继承模板中标明继承模板的插入位置

{% block content %}{% endblock %}

例子:

<html>
  <head>
  head>
  <body>
    <a href="/index">hr下面是继承的插入位置a>
    <hr>
    {% block content %}{% endblock %}
  body>
html>

在继承文件中标明要继承的对象

{% extends "继承的对象" %}
{% block content %}
继承的内容
{% endblock %}

5.导入模板代码

{% include 'common.html' %}

6.函数

{% macro render_comment(comment) %} # 定义一个函数这里macro相当于def
<li>{{ comment }}li>
{% endmacro %}

也可以做成一个包在其他地方导入

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

7.Flask特有的变量

{{ config.SQLALCHEMY_DATABASE_URI }} # config
{{ request.url }} # request
{{ session.new }} # session
{{ url_for('index') }} 

你可能感兴趣的:(flask)