摘要:模板模板引擎说明模板文件就是按照一定的规则书写的展示效果的文件模板引擎就是负责按照指定规则进行替换的工具模板引擎选择一渲染模板的方法将渲染的模板进行返回渲染字符串返回实例将模板内容响应给用户渲染一内容响应给用户原谅色二模板的语法模板中只存
day2模板 模板引擎
说明:模板文件就是按照一定的规则书写的展示效果的HTML文件 模板引擎就是负责按照指定规则进行替换的工具
模板引擎选择jinja2
一、渲染模板的方法
render_template()
render_templates_string()
实例
@app.route("/") def index(): #将模板内容响应给用户 return render_template("index.html") #渲染一内容响应给用户 return render_template_string("二、模板的语法原谅色
")
模板中只存在俩种语法
变量
{{ var }}
#像模板文件中传参 return render_template("index.html",title="首恶") {{ title }}
标签
{% 标签名 %}
注意:
在模板中使用字典中的键 需要像使用对象得方式来调用 {{data.key}}
如果在模板中给定的变量不存在 则插入的是空字符串 不会报错
三、过滤器过滤器使用管道符 | 来使用的
{{ var|abs }} 返回一个数值的绝对值
default 设置默认值
只有当给定的变量不存在时 则执行默认值
当设置default的boolean的时候 会执行默认值
first: 取出变量中的第一个字符
last: 取出变量中的最后一个字符
format: 字符的格式化
length: 返回变量值的长度
join: 拼接成字符串
safe: 不转义标签 原样显示
lower 转为小写
upper 转为大写
replace 替换
striptages 去除HTML标签
{{ data.html|striptags }}
四、标签实例
{% if data.bool %}
实例
{% for i in data.xxxx %} {# 错误的迭代方法TypeError: "bool" object is not iterable #} {# {% for i in data.bool %}#}
注意:
break continue 不能够在这里使用
{% for k,v in data.items() %}
变量 | 描述 |
---|---|
loop.index | 获取当前迭代的索引 从1开始 |
loop.index0 | 获取当前迭代的索引 从0开始 |
loop.first | 是否为第一次迭代 |
loop.last | 是否为最后一次迭代 |
loop.length | 迭代的长度 |
{# 多行注释 #}
七、文件包含 include相当于把一个文件 拷贝到当前的你的包含的位置
实例
{% include "common/header.html" %}我是中间的内容{% include "common/footer.html" %}
注意:
包含的公共的文件中 只存放 公共的代码 除此以外什么都不要存在
导入的时候 如果文件和在同一级别 直接导入就可以 如果包含在某个目录中 需要写出路径
{% include "common/header.html" %} {% include "test.html" %}
八、宏 macro概念: 类似python中的函数
实例
在macro.html中
{% macro input(name,type="text",value="") %} {% endmacro %}
宏的调用
{{ input("text","username","") }} {{ input() }} {{ input(type="password",name="userpass") }}宏的导入 (1) import
{% import "test.html" as test %} {% import "common/test.html" as test %}(2) form import用户名: {{ test.input(type="password",name="userpass") }}
{% from "test.html" import input %} {% from "common/test.html" import input %}用户名: {{ input(type="password",name="userpass") }}
注意:
宏的调用只能在定义的下方去调用 否则未定义
宏如果存在形参 且没有默认值 则可以调用(没意义)
形参的默认值 需要遵循默认值规则 有默认值的参数 放右侧
可以正常使用 关键字参数
九、继承 extends{% extends %} 继承某个模板
{% block %} 挖坑和填坑
{{ super() }} 调用被替换掉的代码
{% block header %} {% block meta %} {% endblock %}{% block title%}首页{% endblock %} {% block link %} {% endblock %} {% block script %} {% endblock %} {% endblock %}头部 {% block con %} 我是中间的内容部分 {% endblock %}
{% extends "common/base.html" %} {% block title %} 我的首页 {% endblock %} {% block style %} {{ super() }} p{color:green;} {% endblock %} {% block con %}我是首页的内容
我是首页的内容 {% endblock %}
注意:
如果当替换某个样式的时候 所有原来的样式 都消失了 去查看是否使用了super()
十、flask-bootstrap安装
pip install flask-bootstrap
sudo pip3 install flask-bootstrap
使用
继承 bootstrap/base.html 基础模板 改造成适用于自己网站的base.html基础模板
自己的base.html{% extends "bootstrap/base.html" %} {% block navbar %} {% endblock %} {% block content %}{% block pagecontent %} 网页的中间内容部分写在当前的位置 {% endblock %}{% endblock %}
使用 index.html
{% extends "common/base.html" %} {% block title %} 首页 {% endblock %}十一、错误页面的定制 manage.py
@app.errorhandler(404) def page_not_found(e): return render_template("common/error.html",error=e,code=404) @app.errorhandler(500) def server_error(e): return render_template("common/error.html",error=e,code=500)error.html
{% extends "common/base.html" %} {% block title %} {{ code }}错误 {% endblock %} {% block pagecontent %}十二、视图传递多个参数 (1) 原始传参{{ error }}{% endblock %}
@app.route("/") def index(): return render_template("index.html",arg1=1,arg2=2...)(2) 使用字典
@app.route("/") def index(): return render_template("index.html",arg={arg1:1,arg2:2...}) kwarg={arg1:1,arg2:2...} return render_template("index.html",``)(3) 使用全局变量g
@app.route("/") def index(): g.name = "张三" g.age = 18 return render_template("index.html") 模板中(4) 使用 **locals()
- {{ g.name }}
- {{ g.age }}
@app.route("/") def index(): name = "张三" age = 18 print(locals()) return render_template("index.html",**locals()) 模板中
@app.route("/test/") def test(): print(url_for("index",_external=True)) return "test"十四、加载静态资源
静态资源:图片,css,js,视频,音频,,
实例
flask入门3-表单
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41825.html
摘要:每天的内容跑起来模板引擎表单文件上传邮件发送一框架的简介模型负责数据的操作视图负责数据的展示控制器控制你的的操作以及视图模板的渲染在中叫做模型负责数据的操作控制你的的操作以及视图模板的渲染业务逻辑的操作模板负责数据的展示二架构三概念是 flask 每天的内容 flask跑起来 模板引擎 flask表单 文件上传邮件发送 flask-sqlalchemy 一、web框架的简介 M ...
摘要:示例如下静态路由使用动态变量的路由未指定变量类型使用动态变量的路由指定变量类型指定的路由变量,可以作为被装饰的函数参数传入进来。 开始决定认真的在网上写一些东西,主要原因还是在于希望能提升学习效果。虽说python写了有几年,但是web后端框架的确没怎么接触过,买了本狗书寥寥草草的过了一遍,发现很多东西还是理解不深,真的是好记性不如烂笔头,知识也要从基础开始,退回来好好看看官方文档,再...
摘要:我们的论坛项目就使用了该框架。此外,麦子学院也有一个入门视频教程,一共小时的视频教程,涵盖开发的方方面面,包括环境的搭建,语法介绍,项目结构的组织,全球化,单元测试等内容。博客地址更多阅读的机制三个框架的对比 前面两篇文章中我们已经了解 Web(HTTP)服务器,Web应用程序,Web框架,WSGI这些 Python Web 开发中的概念。我们知道,Web框架通过将不同Web应用程序中...
摘要:一一个最小的应用是程序实例,一个项目只能有一个程序实例路由装饰器视图函数返回一个字符串把程序保存为用解释器运行访问,会看见问候。路由装饰器这个函数的返回值称为响应,是客户端接收到的内容。 一.一个最小的Flask应用 from flask import Flask app = Flask(__name__) #app是程序实例,一个项目只能有一个程序实例 @app.route(/) #...
阅读 2277·2021-11-24 09:39
阅读 2969·2021-10-15 09:39
阅读 3068·2021-07-26 23:38
阅读 2264·2019-08-30 11:14
阅读 3393·2019-08-29 16:39
阅读 1696·2019-08-29 15:23
阅读 741·2019-08-29 13:01
阅读 2638·2019-08-29 12:29