Flask学习之旅——2.1 模板简介及基础使用

前言

  • 本文为《知了传课——模板简介》的学习笔记。
  • 原文地址:第一节:模板简介 - Python框架Flask基础教程 - 知了传课 (zlkt.net)

什么是模板?

  • 模板是一个web开发必备的模块。因为我们在渲染一个网页的时候,并不是只渲染一个纯文本字符串,而是需要渲染一个有富文本标签的页面。这时候我们就需要使用模板了。
  • Flask中,配套的模板是Jinja2Jinja2的作者也是Flask的作者。这个模板非常的强大,并且执行效率高。

创建模板

  • 我们在创建Flask项目的时候,会自动在该项目下创建一个template文件夹,这个文件夹是专门用来保存模板的。
  • 在该文件下,创建一个HTML文件,则这个HTML文件就是我们所说的模板。

Flask渲染Jinja模板

要渲染一个模板,通过render_template方法即可

例子

from flask import Flask,render_template #这里需要引入render_template库
app = Flask(__name__)@app.route('/about/')
def about():return render_template('about.html')

当访问/about/的时候,about()函数会在当前目录下的templates文件夹下寻找about.html模板文件。

变量的使用

如果想要传递变量到模板中,可以先把变量定义为字典,然后在render_template中通过关键字传递过去。render_template('xxx.html',**字典名)

app.py

from flask import Flask, request, redirect, url_for, render_template
import configapp = Flask(__name__)
app.config.from_object(config)  ###使用配置文件@app.route('/about/')
def about():context = {"username":"admin"}  ###创建一个字典,用于传递数据return render_template('about.html',**context)if __name__ == '__main__':app.run()

about.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>关于我们</title>
</head>
<body>
<h1>关于我们——用户名:{{ username }}</h1>
</body>
</html>

运行后的效果图:

补充内容

1. <html lang="en">
2. <head>
3.    <title>My Webpage</title>
4. </head>
5. <body>
6.     <ul id="navigation">
7.     {% for item in navigation %}
8.         <li><a href="{{ item.href }}">{{ item.caption }}</a></li>
9.     {% endfor %}
10.    </ul>
11.
12.    {{ a_variable }}
13.    {{ user.name }}
14.    {{ user['name'] }}
15.
16.    {# a comment #}
17. </body>
18.</html>
语句 作用
{{...}} 用来装载一个变量,模板渲染的时候,会把这个变量代表的值替换掉。并且可以间接访问一个变量的属性或者一个字典的key。关于点.号访问和[]中括号访问,没有任何区别,都可以访问属性和字典的值。
{%...%} 用来装载一个控制语句,上面装载的是for循环,以后只要是要用到控制语句的,就用{% %}
{# … #} 用来装载一个注释,模板渲染的时候会忽视这中间的值。

属性访问规则

  1. 比如在模板中有一个变量这样使用:foo.bar,那么在Jinja2中是这样进行访问的:

    • 先去查找foobar这个属性,也即通过getattr(foo,'bar')
    • 如果没有,就去通过foo.__getitem__('bar')的方式进行查找。
    • 如果以上两种方式都没有找到,返回一个undefined
  2. 在模板中有一个变量这样使用:foo['bar'],那么在Jinja2中是这样进行访问:
    • 通过foo.__getitem__('bar')的方式进行查找。
    • 如果没有,就通过getattr(foo,'bar')的方式进行查找。
    • 如果以上没有找到,则返回一个undefined

总结

  1. 模板文件,即HTML文件,需要放到templates文件夹下,也可以通过Flask(__name__,template_folder)修改模板地址,后者不推荐使用。

  2. 通过render_template来渲染模板。

  3. 模板文件,即HTML文件,需要放到templates文件夹下,也可以通过Flask(__name__,template_folder)修改模板地址,后者不推荐使用。

  4. 通过render_template来渲染模板。

  5. 如果想要传递变量到模板中,可以先把变量定义为字典,然后在render_template中通过关键字传递过去。render_template('xxx.html',**字典名)

Flask学习之旅——2.1 模板简介及基础使用相关推荐

  1. Flask学习之旅——2.6 模板继承

    Flask学习之旅--2.6 模板继承 前言 本文为<知了传课--模版继承>的学习笔记. 原文地址:第八节:模板继承 - Python框架Flask基础教程 - 知了传课 (zlkt.ne ...

  2. Flask学习之旅——2.2 模板过滤器

    Flask学习之旅--2.2 模板过滤器 前言 本文为<知了传课--Jinja2模版过滤器>的学习笔记. 原文地址:第三节:模板过滤器 - Python框架Flask基础教程 - 知了传课 ...

  3. Flask学习之旅——1.1初识Flask

    Flask学习之旅--1.1初识Flask 前言 从本文开始,正式踏上了学习Python Flask的旅程啦. 我是跟着知了传课进行学习的,本系列涉及到的内容大部分来自知了传课. Flask简介 Fl ...

  4. Flask学习之旅——3 视图高级

    Flask学习之旅--3 视图高级 前言 本文为<知了传课-- 视图高级>的学习笔记. 蓝图 为什么使用蓝图? 当项目比较大或者代码比较多的时候,让所有的url和视图函数放在同一个文件夹里 ...

  5. Flask学习之旅——2.5 include和set语句

    Flask学习之旅--2.5 include和set语句 前言 本文为<知了传课--控制语句>的学习笔记. 原文地址:第七节:include和set语句 - Python框架Flask基础 ...

  6. Flask学习之旅——2.4 宏与import语句

    Flask学习之旅--2.4 宏与import语句 前言 本文为<知了传课--控制语句>的学习笔记. 原文地址:第六节:宏和import语句 - Python框架Flask基础教程 - 知 ...

  7. Flask学习之旅——2.8 配置静态文件

    Flask学习之旅--2.8 配置静态文件 前言 本文为<知了传课-- 配置静态文件>的学习笔记. 原文地址:第十一节: 配置静态文件 - Python框架Flask基础教程 - 知了传课 ...

  8. Flask学习之旅——2.3 控制语句

    Flask学习之旅--2.3 控制语句 前言 本文为<知了传课--控制语句>的学习笔记. 原文地址:第四节:控制语句 - Python框架Flask基础教程 - 知了传课 (zlkt.ne ...

  9. Flask学习之旅——1.2项目配置

    Flask学习之旅--1.2项目配置 前言 本文是我在知了传课学习的学习笔记. 上一篇:Flask学习之旅--1.1初识Flask 下一篇:Flask学习之旅--1.3 URL与视图(一) 一.设置为 ...

最新文章

  1. 纹理对象的实时姿态估计
  2. Linux启动多个Oracle实例
  3. 搞清这些陷阱,NULL和三值逻辑再也不会作妖
  4. 引用自己创建的css样式表_如何使用CSS创建联系表
  5. 2.[精通Hibernate笔记]整合Spring
  6. 病毒周报(100118至100124)
  7. C#WinForm程序异常退出的捕获、继续执行与自动重启
  8. Linux下C++的多线程编程
  9. 以太坊 事务处理流程
  10. C# List 深复制
  11. navicat for MySQL连接本地数据库时报1045错误的解决方法
  12. Entity Relationship diagram/Data model for Microsoft Navision
  13. linux新手入门-2.开局
  14. vrrp和mstp实现网关冗余备份以及链路的负载均衡
  15. Nginx+lua开发(OpenResty生态)
  16. 多图识字 | 自动识别提取图片文字,微信小程序
  17. 【方法】科大讯飞在线语音合成API使用-文字转语音音频
  18. 最简真分数(最小公倍数)
  19. 模型可解释性-LIME
  20. iOS开发日记54-Xcode7调试神技

热门文章

  1. 一碗面风行30年,康师傅匠心守护传承中国味道
  2. 用发票识别不担心发票丢失
  3. 【LeetCode】91.解码方法
  4. php mysql 模糊查询_PHP如何实现模糊查询(图文代码)
  5. 实验5:简单恐龙识别系统的产生式推理
  6. 【iOS高级资深工程师面试篇】②、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 Objective-C语言特性部分1/2 分类-关联对象-扩展-代理
  7. JavaScript 07 —Array Cardio Day2
  8. K-近邻算法(约会问题)
  9. 除了暴富神话 区块链让你记住仅仅是炒币
  10. 聚合支付需要什么证?