Janjia2模板引擎

Janjia2模板引擎

python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html文件)分开的, 使得代码的可读性增强, 代码容易理解和维护;
模板渲染: 在html文件中,通过动态赋值 , 将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。
其他的模板引擎: Mako, Template, Jinja2

1.python自带的模块

import  string

strObj  = string.Template("$who is $role")
# 渲染字符串的过程;
print(strObj.substitute(who="fentiao", role="cat"))

在这里插入图片描述

2.Jinja2变量显示语法: {{ 变量名 }}

例如:

# for循环:
    {% for i in li%}

    {% endfor %}

# if语句
    {% if user == 'westos'%}


    {% elif user == 'hello' %}

    {% else %}

    {% endif%}

实例:

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


<p>变量:</p> {{ name }}
<p>列表:</p> {{ li }}
 /*依次遍历列表的每一个元素*/
{% for i in li %}
<br/> 列表元素显示: {{ i }}
{% endfor %}



<p>字典:</p> {{ d }}
<p>字典:</p> {{ d.a }}
<p>字典:</p> {{ d['a'] }}
<p>字典:</p> {{ d.b }}
<p>字典:</p> {{ d['b']}}
<p>对象:</p> {{ u }}


<table>
    <tr>
        <th>用户名</th>
        <th>密码</th>
    </tr>

    <tr>
        <td>{{ u.name }}</td>
        <td>{{ u.passwd }}</td>
    </tr>


</table>
</body>
</html>

运行函数

from flask import Flask, render_template

app = Flask(__name__)

class User(object):
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return  "<User: %s>" %(self.name)

@app.route('/')
def index1():
    name = "这是一个消息"
    li = [1, 2, 4, 5]
    d = dict(a=1, b=2)
    u = User("villa", "passwd")
    return  render_template('index1.html',
                            name = name,
                            li = li,
                            d = d,
                            u = u
                            )

app.run(port=5003)

在这里插入图片描述

3.过滤器与自定义过滤器

html页面

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

/*什么是过滤器?
实质上就是一个转换函数/方法
*/



{{ timestamp }}
{{ timestamp | format_date }}
/*常见的字符串过滤器操作:*/
<ul>
    <li>{{ name | upper }}</li>
    <li>{{ name | lower }}</li>
    <li>{{ "hello" | capitalize }}</li>
    <li>{{ " hello world" | capitalize }}</li>
    <li>{{ name | reverse }}</li>
</ul>


/*常见数值操作*/

<ul>
    <!--四舍五入-->
    <li>{{ -12.9623423435 | round }}</li>
    <li>{{ -12.9623423435 | round | abs }}</li>

</ul>

/*列表常见:*/
<ul>
    <li>{{ li }}</li>
    <li>{{ li | first }}</li>
    <li>{{ li | last }}</li>
    <li>{{ li | length }}</li>
    <li>{{ li | sum }}</li>
    <li>{{ li | sort | reverse }}</li>
    <li>{{ li | join(":") }}</li>
    <li>{{ ["hello", "world"] | upper}}</li>
    <li>{{ ["hello", "woHld"] | lower}}</li>

</ul>
/*列表包含字典常用操作:*/

<ul>
    {% for item in liDict | sort(attribute='price', reverse=false) %}
    {{ item }}
    {% endfor %}
</ul>

</body>
</html>

Python运行程序

import time
from flask import Flask, render_template

app = Flask(__name__)

class User(object):
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return "<User: %s>" % (self.name)


# 自定义一个转换时间格式的过滤器

@app.route('/')
def index2():
    name = "      this is a message"
    li = [1, 2, 4, 5]
    d = dict(a=1, b=2)
    liDict = [
        {
            'count': 100,
            'price': 30
        },
        {
            'count': 110,
            'price': 20
        },

    ]
    u = User("westos", "passwd")
    timestamp = time.time()
    return render_template('index2.html',
                           name=name,
                           li=li,
                           d=d,
                           u=u,
                           liDict=liDict,
                           timestamp=timestamp
                           )


def format_date(value, format="%Y-%m-%d %H:%M:%S"):
    #  时间戳----> 元组
    ttime = time.localtime(value)
    # 元组 --- > 指定字符串
    return time.strftime("%Y-%m-%d %H:%M:%S", ttime)


app.add_template_filter(format_date, 'format_date')


@app.route('/index3/')
def index3():
    return render_template('index3.html',
                           timestamp=time.time())
app.run(port=5004)

在这里插入图片描述

4. 模板与继承
模板继承语法:
    1. 继承某个模板
            {% extends "模板名称" %}


    2. 挖坑和填坑
    挖坑:
        {% block 名称 %}

            默认值

        {% endblock %}


    填坑:
        {% block 名称 %}

        {% endblock %}


    3. 调用/继承被替代的模板
        挖坑:
        {% block 名称 %}

            默认值

        {% endblock %}


    填坑:
        {% block 名称 %}
            #继承挖坑时的默认值
            {{ super() }}

            # 后面写新加的方法.
            ........
        {% endblock %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值