Jinja2模板

Jinja2模板传参

  1. 如何渲染模板:

    • 模板放在templates文件夹下
    • flask中导入render_template函数。
    • 在视图函数中,使用render_template函数,渲染模板。注意:只需要填写模板的名字,不需要填写templates这个文件夹的路径。
  2. 模板传参:
    • 如果只有一个或者少量参数,直接在render_template函数中添加关键字参数就可以了。
    • 如果有多个参数的时候,那么可以先把所有的参数放在字典中,然后在render_template中,
      使用两个星号,把字典转换成关键参数传递进去,这样的代码更方便管理和使用。
  3. 在模板中,如果要使用一个变量,语法是:{{params}}
  4. 访问模型中的属性或者是字典,可以通过{{params.property}}的形式,或者是使用{{params['age']}}.

示例代码

06template01 .py

#encoding: utf-8
from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():# 类class Person(object):name = u'p17bdw'age = 18p = Person()context = {'username': u'c17bdw','gender': u'男','age': 17,'person': p,    # 声明'websites': {'baidu': 'www.baidu.com','google': 'www.google.com'}}return render_template('anthoer/index.html',**context)if __name__ == '__main__':app.run(debug=True)

anthoer/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>这是HTML文件中出现的文字<p>用户名:{{ username }}</p><p>性别:{{ gender }}</p><p>年龄:{{ age }}</p><hr><p>名字:{{ person['name'] }}</p><p>年龄:{{ person.age }}</p><hr><p>百度:{{ websites['baidu'] }}</p><p>谷歌:{{ websites['google'] }}</p>
</body>
</html>

if判断

  1. 语法:
    {% if xxx %} {% else %} {% endif %}

  2. if的使用,可以和python中相差无几。

示例代码

07if_statement .py

# 输入 http://127.0.0.1:5000/1/ 为登录状态,否则为未登录状态。#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/<is_login>/')
def index(is_login):if is_login == '1':user = {'username': u'17bdw','age':20}return render_template('index.html',user=user)else:return render_template('index.html')if __name__ == '__main__':app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>{% if user and user.age > 18 %}<a href="#">{{ user.username }}</a><a href="#">注销</a>{% else %}<a href="#">登录</a><a href="#">注册</a>{% endif %}
</body>
</html>

for循环遍历列表和字典

  1. 字典的遍历,语法和python一样,可以使用items()keys()values()iteritems()iterkeys()itervalues()
    {% for k,v in user.items() %} <p>{{ k }}:{{ v }}</p> {% endfor %}
  2. 列表的遍历:语法和python一样。
    {% for website in websites %} <p>{{ website }}</p> {% endfor %}

示例代码

08for_statement .py

#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)# for遍历字典@app.route('/')
def index():books = [{'name': u'西游记','author': u'吴承恩','price': 109},{'name': u'红楼梦','author': u'曹雪芹','price': 200},{'name': u'三国演义','author': u'罗贯中','price': 120},{'name': u'水浒传','author': u'施耐庵','price': 130}]return render_template('index.html',books=books)if __name__ == '__main__':app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><table><thead><th>书名</th><th>作者</th><th>价格</th></thead><tbody>{% for book in books %}<tr><td>{{ book.name }}</td><td>{{ book.author }}</td><td>{{ book.price }}</td></tr>{% endfor %}</tbody>
</table></body>
</html>

过滤器

  1. 介绍和语法:

    • 介绍:过滤器可以处理变量,把原始的变量经过处理后再展示出来。作用的对象是变量。
    • 语法:
      {{ avatar|default('xxx') }}
  2. default过滤器:如果当前变量不存在,这时候可以指定默认值。
  3. length过滤器:求列表或者字符串或者字典或者元组的长度。
  4. 常用的过滤器:
    abs(value):返回一个数值的绝对值。示例:-1|abs
    default(value,default_value,boolean=false):如果当前变量没有值,则会使用参数中的值来代替。示例:name|default('xiaotuo')——如果name不存在,则会使用xiaotuo来替代。boolean=False默认是在只有这个变量为undefined的时候才会使用default中的值,如果想使用python的形式判断是否为false,则可以传递boolean=true。也可以使用or来替换。
    escape(value)或e:转义字符,会将<、>等符号转义成HTML中的符号。示例:content|escape或content|e。
    first(value):返回一个序列的第一个元素。示例:names|first
    format(value,*arags,**kwargs):格式化字符串。比如:

    {{ "%s" - "%s"|format('Hello?',"Foo!") }}
    将输出:Helloo? - Foo!
    last(value):返回一个序列的最后一个元素。示例:names|last。

    length(value):返回一个序列或者字典的长度。示例:names|length。
    join(value,d=u''):将一个序列用d这个参数的值拼接成字符串。
    safe(value):如果开启了全局转义,那么safe过滤器会将变量关掉转义。示例:content_html|safe。
    int(value):将值转换为int类型。
    float(value):将值转换为float类型。
    lower(value):将字符串转换为小写。
    upper(value):将字符串转换为小写。
    replace(value,old,new): 替换将old替换为new的字符串。
    truncate(value,length=255,killwords=False):截取length长度的字符串。
    striptags(value):删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。
    trim:截取字符串前面和后面的空白字符。
    string(value):将变量转换成字符串。
    wordcount(s):计算一个长字符串中单词的个数。

示例代码

09filter_demo .py

#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():comments = [{'user': u'admin','content': 'xxxx'},{'user': u'tesr','content': 'xxxx'}]return render_template('index.html',comments=comments)if __name__ == '__main__':app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>过滤器</title>
</head>
<body># 如果avatar这个变量不存在,就使用default过滤器提供的值<img src="{{ avatar|default('http://avatar.csdn.net/1/D/B/3_hmzkekek41.jpg') }}" alt=""><hr># length 计算长度
<p>评论数:({{ comments|length }})</p>
<ul>{% for comment in comments %}<li><a href="#">{{ comment.user }}</a><p>{{ comment.content }}</p></li>{% endfor %}</ul>
</body>
</html>

继承和block

  1. 继承作用和语法:

    • 作用:可以把一些公共的代码放在父模板中,避免每个模板写同样的代码。
    • 语法:
      {% extends 'base.html' %}
  2. block实现:
    • 作用:可以让子模板实现一些自己的需求。父模板需要提前定义好。
    • 注意点:字模板中的代码,必须放在block块中。

示例代码

app.py

#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/login/')
def login():return render_template('login.html')if __name__ == '__main__':app.run(debug=True)

index.html

# 基础页面
{% extends 'base.html' %}{% block head %}<style></style><link rel="stylesheet" href="">{% endblock %}{% block title %}首页
{% endblock %}{% block main %}<h1>这是首页</h1>
{% endblock %}

base.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><style>.nav{background: #3a3a3a;height: 65px;}ul{overflow: hidden;}ul li{float: left;list-style: none;padding: 0 10px;line-height: 65px;}ul li a{color: #fff;}</style>{% block head %}{% endblock %}
</head>
<body>
<div class="nav"><ul><li><a href="/">首页</a></li><li><a href="/login">发布问答</a></li></ul>
</div>
{% block main %}{% endblock %}
</body>
</html>

login.html

{% extends 'base.html' %}{% block title %}登录
{% endblock %}{% block main %}<h1>这是登录页面</h1>
{% endblock %}

url链接

使用url_for(视图函数名称)可以反转成url。

加载静态文件

  1. 语法:url_for('static',filename='路径')
  2. 静态文件,flask会从static文件夹中开始寻找,所以不需要再写static这个路径了。
  3. 可以加载css文件,可以加载js文件,还有image文件。
    ```
    第一个:加载css文件

    第二个:加载js文件

    第三个:加载图片文件

    ```

转载于:https://www.cnblogs.com/17bdw/p/9766902.html

【Python】Flask系列-模板笔记相关推荐

  1. 知了课堂 Python Flask零基础 笔记整理

    目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...

  2. flask系列---模板的继承及Bootstrap实现导航条(四)

    在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在网页上方的导航条,并在所有的页面中继承这个导航条.导航 ...

  3. python flask html模板,python flask web开发实战 Jinja2模板

    templates/index.html Hello World! templates/user.html Hello, {{ name }}! 渲染模板: from flask import Fla ...

  4. Python flask渲染模板注入

    2018-TokyoWesterns-Web-shrine 参考链接: https://blog.csdn.net/Onlyone_1314/article/details/121875761 imp ...

  5. Python Flask框架学习笔记14

    数据库一对一的关系: 实现一对一的关系,只需要在一对多的基础上,将"多"的那一端设置为"一"即可. 书上举得例子是:用户拓展表. 在公司业务增长的情况下,需要存 ...

  6. flask html 模板继承,Flask框架模板继承实现方法分析

    Flask框架模板继承实现方法分析 本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有 ...

  7. python flask 快速搭建 WEB 实战

    python flask 快速搭建 WEB 实战 tags: flask 文章目录 python flask 快速搭建 WEB 实战 1. app.py配置首页 2. views.py配置首页 3. ...

  8. Python框架Flask系列教程(1)——基础-黄勇-专题视频课程

    Python框架Flask系列教程(1)--基础-4431人已学习 课程介绍         从初级讲解Flask开发网站.涉及到的知识点包括:URL和视图.Jinja2模版.SQLAlchemy数据 ...

  9. Web框架——Flask系列之Jinja2模板引擎(二)

    Jinja2模板引擎简介 一.Jinja2模板概述 用来展示数据的html页面,这个过程也通常称为渲染,属于Jinja2的功能 使用模板的好处: 视图函数只负责业务逻辑和数据处理(业务逻辑方面) 而模 ...

最新文章

  1. 应用YOLOV4 - DeepSort 实现目标跟踪
  2. 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用
  3. Mac下Android studio 之NDK配置教程(一)
  4. IDC与村村乐合作服务中国农村市场
  5. python【数据结构与算法】一维前缀和与差分
  6. ajax+struts2实现总结
  7. 你有可能错过的东西:IIS7 ULR-Rewrite已经成为正式版本
  8. [016]转--C++拷贝构造函数详解
  9. android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果
  10. 爱立信数据分析解决方案抓住物联网发展机遇
  11. 小程序转h5之后 vant文件查找失败:_你还在使用原生开发小程序吗
  12. C++编程语言中调用函数时分号数量的影响分析
  13. 字节跳动 8 年,抖音、头条的技术能力开发者都可以用起来了!
  14. jenkins 出现“Error 403 No valid crumb was included in the request ”的解决方案
  15. 内网计算机病毒如何查杀,如何追踪并查杀局域网ARP病毒 局域网如何查杀ARP病毒...
  16. Oracle总结-学习这一篇就够了
  17. 苹果Mac键盘打不出字怎么办?
  18. 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题
  19. 《Effective STL》重读笔记整理
  20. 基于ADXL345三轴加速器的虚拟手柄

热门文章

  1. 用手轻轻摸出浑圆翘臀
  2. 虚拟ip mysql负载均衡_微服务管理平台nacos虚拟ip负载均衡集群模式搭建
  3. 各国的手机制式和频率
  4. Centos6.5 FTP服务器安装
  5. 精选(1)为什么Map桶中个数超过8才转为红黑树
  6. 北京林业大学2020软件工程/计算机技术/电子信息专硕初试上岸经验
  7. 电脑故障速排方法 - 键盘篇、鼠标篇
  8. c4d-变形工具-7
  9. 学生党福利!学习python电脑及配置大盘点,游戏学习两不误
  10. 谁在制造“完美男性”?