jinja2

出现的原因

视图函数会生成请求的响应,当视图函数接受包含用户输入数据的用户请求后,视图函数需要访问数据库,添加新用户,然后在生成相应,有两个过程,业务逻辑和表现逻辑,使得代码难以理解,维护
为了提高程序的可维护性
将表现逻辑写入模板中,及将响应写入模板中

什么是模板

模板是包含响应文本的文件,其中占位变量表示动态部分,具体值根据上下文信息获得
渲染
用真实值代替占位变量,返回最终响应字符串,这一个过程是
flask用jinja2模板进行渲染模板

jinja2模板引擎

  1. {% … %} 语句(Statements)
  2. {{ … }} 打印模板输出的表达式(Expressions)
  3. {# … #} 注释
  4. # … ## 行语句(Line Statements)

单行注释:

{#% for user in users %#}

下面是多行注释:

{# note: commented-out template because we no longer use this
    {% for user in users %}
        ...
    {% endfor %}
#}

静态表示
<h1>hello,world!</h1>
响应中含有使用变量表示的动态部分
<h1>hello,{{name}}</h1>

模板的渲染

flask在程序文件夹中的子文件夹templates中寻找模板
template中保存定义的模板,响应的模板
视图函数修改为
return render_template(模板文件,占位变量=值)
return render_template(user.html,name = name )
左边的name表示模板中大的占位符,右边的name表示当前作用域中的变量,表示参数的值

render_template()函数将

jinja2模板引擎集成到程序中

变量

{{name}}这个位置的值告诉模板引擎从渲染模板时使用的数据中获取

变量的类型

列表、字典、对象

过滤器

hello,{{name|capitaliza}}
safe–>渲染时不转义
capitalize–>值得首字母转换成大写,其他字母为小写
lower–>小写
upper–>大写
title–>单词首字母大写
trim–>单词首尾字母转换
striptages–>html标签都去掉

控制结构

if else

{% if user %}
hello,{{user}}
{% else %}
hello,stranger!
{% endif %}

for
<ul>
    {% for comment in comments %}
        <li>{{comment}}</li>
    {% endfor %}
</ul>
{% macro render_comment(comment)%}
    <li>{{comment}}</li>
{% endmacro %}
<ul>
{% for comment in comments %}
    <li>{{render_comment(commnet)}}</li>
{% endfor %}
</ul>

为了重复使用宏定义,将定义的宏单独写在一个文件中,在需要的模板中导入

{% import 'macros.html' as macros %}
<ul>
    {% for comment in comments %}
        {{macors.render_comment(comment)}}
    {% endfor %}
</ul>

重复使用的模板片段写在单独文件,包含在所有模板中,避免重复
{% include ‘common.html’ %}

模板继承

  1. 创建基模板base.html
<!DOCTYPE html>
<html>
<head>
    {% block head %}-->block标签内定义的元素可在衍生模板中修改
    <title>{ %block title %}{% endblock %} - My Application</title> 
    {%endblock%}
</head>
<body>
    {% block body %}
    {% endblock %}
</body>
</html>

衍生模板

{% extends "base.html "%}{extends声明这个模板衍生自base.html
                                在extend指令之后基模板的三个块被重新定义}
{% block title %}
    Index
{%endblock%}
{% block head %}
    {{super()}}**-->使用super获取原来的内容
    <style>
    </style>
{%endblock%}
{% block body%}
    <h1>hello world!</h1>
{%endblock%}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值