博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.Flask jinjia2模板
阅读量:4950 次
发布时间:2019-06-11

本文共 6096 字,大约阅读时间需要 20 分钟。

1.1.模板传参

(1)主程序

from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')def hello_world():    context = {        'username':'derek',        'age':18,        'gf':{            'name':'xxx',            'height':160        }    }    return render_template('index.html',**context)    #加双下划綫,就可以直接获取key和value了if __name__ == '__main__':    app.run(debug=True)

(2)index.html

模板中渲染数据

{

{ username }}

{

{ age }}

{

{ gf.name }}

{

{ gf['height'] }}

 

1.2.过滤器

 常用的过滤器

  • abs:绝对值
  • default:如果当前变量没有值,则会使用参数中的值来替代
  • escape:转义字符
  • first:返回一个序列的第一个元素
  • format:格式化字符串
  • last:返回一个序列的最后一个元素
  • length:返回一个序列的长度
  • join:拼接字符串
  • safe:关掉转义
  • int:转为int类型
  • float:转为浮点类型
  • lower:转换为小写
  • upper:转换为答谢
  • replace:替换
  • truncate:截取length长度的字符串
  • striptags:删除字符串中所有的html标签,如果出现多个空格,将替换成一个空格

 default过滤器的使用

主程序

from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')def hello_world():    context = {       'position':-9,       'signature':None   #个性签名    }    return render_template('index.html',**context)if __name__ == '__main__':    app.run(debug=True)

index.html

  

过滤器

{

{ position|abs }}

个性签名:{

{ signature|default('此人很懒,没有留下任何说明',boolean=True) }}

也可以用or的方式

过滤器

{

{ position|abs }}

{#

个性签名:{

{ signature|default('此人很懒,没有留下任何说明',boolean=True) }}

#}

个性签名:{

{ signature or '此人很懒,没有留下任何说明' }}

1.3.自定义过滤器

      过滤器本质上就是一个函数,如果在模板中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器这个函数,

然后函数的返回值会作为这个过滤器的返回值。需要使用一个装饰器:@app.template_filter('args')

 

实例:自定义时间处理过滤器

 主程序

from flask import Flask,render_templatefrom datetime import datetimeapp = Flask(__name__)@app.route('/')def hello_world():    context = {        'create_time':datetime(2018,5,25,17,52,10)    }    return render_template('index.html',**context)@app.template_filter('handle_time')  #括号里面是自己给过滤器起的名字def handle_time(time):    '''    1.如果时间间隔小与1分钟以内,就显示“刚刚”    2.如果是1小时以内,显示“xx分钟”    3.如果24h以内,显示“xx小时前”    4.如果大于24小时小与30天,显示“xx天前”    5.大于一个月,显示具体的时间    :param time:    :return:    '''    if isinstance(time,datetime):        now = datetime.now()        timestamp = (now-time).total_seconds()  #当前时间离创建时间的秒数        if timestamp < 60:     #60s以内            return "刚刚"        elif timestamp >= 60 and timestamp < 60*60:            minutes = timestamp / 60            return "%s分钟前"%int(minutes)        elif timestamp >= 60*60 and timestamp < 60*60*24:            hours = timestamp / (60*60)            return '%s小时前'%int(hours)        elif timestamp >= 60*60*24 and timestamp < 60*60*24*30:            days = timestamp / (60*60*24)            return '%s天前'%int(days)        else:            return time.strftime('%Y/%m/%d %H:%M')    else:        return timeif __name__ == '__main__':    app.run(debug=True)

index.html

 

自定义时间过滤器

{
{ create_time|handle_time }}

1.4.if和for的使用

for中包含以下变量,可以用来获取当前的遍历状态

  • loop.index
  • loop.index0
  • loop.first
  • loop.last
  • loop.length

 

if和for简单用法

from flask import Flask,render_templateapp = Flask(__name__)app.config.update({    'DEBUG':True,    'TEMPLATES_AUTO_RELOAD':True})@app.route('/')def hello_world():    context = {        'age':20,        'users':['tom','jack','alice'],        'person':{            'name':'derek',            'age':18        }    }    return render_template('index.html',**context)if __name__ == '__main__':    app.run(debug=True)

index.html

    
Title {% if age >= 18 %} 欢迎 {% else %} 无权限 {% endif %}
    {% for user in users %}
  • {
    { user }}
  • {% endfor %}
{% for key,value in person.items() %}
{% endfor %}
用户名 年龄
{
{ value }}

1.5.宏的使用和导入

模板的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用到的代码片段放到宏中,然后把一些

不固定的值抽取出来当成一个变量。

(1)简单使用实例

{#    定义一个宏,input是宏的名字,里面三个参数,可以指定默认参数值,也可以调用的传参#}    {% macro input(name="",value="",type="text") %}            {% endmacro %}    

用户名:{

{ input('username') }}

密码:{

{ input('password',type="password" )}}

{

{ input(value="提交",type="submit" )}}

(2)宏的两种导入方式

新建macros.html

{% macro input(name="",value="",type="text") %}            {% endmacro %}

index.html中导入使用宏

{#第一种#}{# with context可以把后端传到当前模板的变量传到定义的宏里面#}{% import "macros.html" as macro with context %}    {#第二种#}{% from "macros.html" import input as input_field %}    
Title{# 第一种#}

用户名:{

{ macro.input('username') }}

密码:{

{ macro.input('password',type="password" )}}

{

{ macro.input(value="提交",type="submit" )}}

{# 第二种#}

用户名:{

{ input_field('username') }}

密码:{

{ input_field('password',type="password" )}}

{

{ input_field(value="提交",type="submit" )}}

1.6.set、with在模板中自定义变量

 (1)set

在模板中可以使用set来定义变量,一旦定义了这个变量,在后面的代码中都可以使用,index.html

{% set usernmae='derek' %}    

用户名:{

{ usernmae }}

(2)with

with语句定义的变量,只能在with语句代码块(endwith)里面使用,超过代码块,就不能再使用了,set语句没有end,全局使用

{% with age=18  %}        

年龄:{

{ age }}

{% endwith %}

 

1.7.蓝图的使用

目录如下:

(1)news.py

from flask import Blueprintnews_bp = Blueprint('new',__name__,url_prefix='/news') @news_bp.route('/list/') def news_list(): return '新闻列表'

(2)user.py

from flask import Blueprint# 1.定义一个蓝图,'user':蓝图的名字,url_prefix='/user':给url加一个前缀,注意后面不要加'/'user_bp = Blueprint('user',__name__,url_prefix='/user') @user_bp.route('/profile/') def profile(): return '个人中心'

(3)bluepoint_demo.py

from flask import Flask,url_for# 2.导入from blueprints.user import user_bp from blueprints.news import news_bp app = Flask(__name__) # 3.注册蓝图 app.register_blueprint(user_bp) app.register_blueprint(news_bp) @app.route('/') def hello_world(): return 'Hello World!' with app.test_request_context(): print(url_for('new.news_list')) # /news/list/ 通过url_for反转url的时候要加蓝图的名字 print(url_for('user.profile')) # /user/profile/ if __name__ == '__main__': app.run(debug=True)

 

 

转载于:https://www.cnblogs.com/derek1184405959/p/9100041.html

你可能感兴趣的文章
Linux根据端口查看进程
查看>>
[JavaEE]Hibernate 所有缓存机制详解
查看>>
python-面向对象(股票对象举例)
查看>>
AnkhSVN 简体中文版 2.3.11249.4534
查看>>
chrome收藏夹整理
查看>>
用ctrl+鼠标滚动调节字体大小
查看>>
查数据库有哪些表、查数据库
查看>>
使用git上传github遇到的问题
查看>>
静态页面菜单栏布局整改使用iframeset
查看>>
图解HTTP学习笔记——简单的HTTP协议
查看>>
Java Finally
查看>>
卑鄙的外乡人——公共知识与共有知识
查看>>
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。...
查看>>
Spring中的Advisor,Advice,Pointcut
查看>>
20165223 实验二 面向对象程序设计
查看>>
30岁前不要让人生留下遗憾笔记
查看>>
如何注册EPIMATE
查看>>
交易进行中买家申请退货退款操作流程
查看>>
常用技巧之JS判断数组中某元素出现次数
查看>>
Oracle命令:授权-收回权限-角色-用户状态
查看>>