ps网站子页怎么做,翻书效果的网站,百度我的网站,建网站买什么主机✨✨ 欢迎大家来到景天科技苑✨✨
#x1f388;#x1f388; 养成好习惯#xff0c;先赞后看哦~#x1f388;#x1f388; #x1f3c6; 作者简介#xff1a;景天科技苑 #x1f3c6;《头衔》#xff1a;大厂架构师#xff0c;华为云开发者社区专家博主#xff0c;…
✨✨ 欢迎大家来到景天科技苑✨✨ 养成好习惯先赞后看哦~ 作者简介景天科技苑 《头衔》大厂架构师华为云开发者社区专家博主阿里云开发者社区专家博主CSDN新星创作者掘金优秀博主51CTO博客专家等。 《博客》Python全栈前后端开发人工智能js逆向App逆向网络系统安全数据分析Djangofastapiflask等框架linuxshell脚本等实操经验网站搭建面试宝典等分享。 所属的专栏flask框架零基础进阶应用实战教学 景天的主页景天科技苑 文章目录 Jinja2模板引擎模板基本使用pycharm未识别模板文件配置模板输出变量总结 Jinja2模板引擎
flask在执行过程中的流程
Flask内置的模板引擎Jinja2它的设计思想来源于 Django 的模板引擎DTP(DjangoTemplates)并扩展了其语法和一系列强大的功能。
Flask提供的 render_template 函数封装了该模板引擎Jinja2render_template 函数的第一个参数是模板的文件名后面的参数都是键值对表示模板中变量对应的数据值。 我们在安装flask的时候就依赖安装了Jinja2
模板基本使用
在flask应用对象创建的时候设置template_folder参数默认值是templates也可以自定义为其他目录名需要手动创建模板目录。
from flask import Flask, render_template
app Flask(__name__, template_foldertemplates)2.在手动创建 templates 目录下创建一个模板html文件 index.html代码
!DOCTYPE html
html langen
headmeta charsetUTF-8title{{title}}/title
/head
bodyh1{{content}}/h1
/body
/html3.在视图函数设置渲染模板并设置模板数据
from flask import Flask, render_template
#通过template_folder参数指定模板路径目录app Flask(__name__, template_foldertemplates)app.route(/)
def index():title 网页标题content 网页正文内容#这里写模板文件。基于templates来写路径locals()可以收集局部变量成字典类型数据此处使用星星打散的方式将字典数据转化为键值对形式传参#类似于这种# return render_template(index.html, titletitle,contentcontent)return render_template(index.html, **locals())if __name__ __main__:app.run()运行程序浏览器访问可以看到网页标题和网页内容都是我们设置的字段内容
flask中提供了2个加载模板的函数render_template与render_template_string。
render_template基于参数1的模板文件路径读取html模板内容返回渲染后的HTML页面内容类型是字符串不是response对象。
render_template_string基于参数1以字符串的方式传参的模板内容返回渲染后的HTML页面内容。
代码案例
from flask import Flask, render_template,render_template_stringapp Flask(__name__, template_foldertemplates)app.route(/)
def index():title 网页标题content 网页正文内容print(locals())# 这里写模板文件。基于templates来写路径locals()可以收集局部变量成字典类型数据此处使用星星打散的方式将字典数据转化为键值对形式传参# return render_template(index.html, titletitle,contentcontent)html render_template(index.html, **locals())print(rend_template返回,html,type(html))return html#rend_template_string
app.route(/tmp)
def tmp():title 网页标题content 网页正文内容#将网页内容以字符串的形式传参temp !DOCTYPE html
html langen
headmeta charsetUTF-8title{{title}}/title
/head
bodyh1{{content}}/h1
/body
/htmlhtml render_template_string(temp, **locals())print(rend_template_string返回,html, type(html))return htmlif __name__ __main__:app.run(debugTrue)浏览器访问/tmp路径url。返回也是字符串
pycharm未识别模板文件配置
pycharm中当我们设置了模板文件但是pycharm并未识别
此时我们可以设置当前项目的模板语言 设置路径 files/settings/languages frameworks/python template languages。 设置下拉框为jinja2保存
设置指定目录为模板目录鼠标右键-Mark Directory as …- Template Folder
此时pycahrm就不再有警告了
模板输出变量
{{ 变量名 }}这种 {{ }} 语法叫做 变量代码块
Jinja2 模版中的变量代码块的输出的内容可以是Python的任意类型数据或者对象只要它能够被 Python 的 __str__ 方法或者str()转换为一个字符串就可以比如可以通过下面的方式显示一个字典或者列表中的某个元素:
视图代码
from flask import Flask, render_template, session, gapp Flask(__name__, template_foldertemplates)app.config[SECRET_KEY] my secret keyapp.route(/)
def index():# 基本类型num 100num2 3.14is_bool Truetitle 网页标题# 复合类型set_var {1,2,3,4}list_var [小明, 小红, 小白]dict_var {name: root, pwd: 1234557}tuple_var (1,2,3,4)# 更复杂的数据结构book_list [{id: 10, title: 图书标题10a, description: 图书介绍,},{id: 13, title: 图书标题13b, description: 图书介绍,},{id: 21, title: 图书标题21c, description: 图书介绍,},]session[uname] rootg.num 300html render_template(index.html, **locals())return htmlapp.route(/user/uid)
def user1(uid):return okapp.route(/user)
def user2():return okif __name__ __main__:app.run(debugTrue)模板代码
!DOCTYPE html
html langen
headmeta charsetUTF-8title{{title}}/title
/head
bodyp基本类型brnum {{num}}br{{num2}}br{{is_bool}}br{{title}}br/pp{# 此处为模板注释 #}复合类型br
{# {{set_var}}br#}{{set_var.pop()}}br{{list_var}}br{{list_var[1]}}br{{list_var.0}}br{{list_var[-1]}}点语法不能写负数下标br{{dict_var}}br{{dict_var[name]}}br{{dict_var.name}}br{{tuple_var}}br{{tuple_var.0}}br/pp更复杂的数据结构br{{book_list}}br{{book_list.2}}br{{book_list.1.title}}br/pp内置的全局变量 br{{request}}br{{request.path}}br{{request.method}}br{{session.get(uname)}}br{{g.num}}br/p{# 配置信息#}p{{ config.ENV }}/pp{{ url_for(user1, uid3) }}/p {# /user/3 #}p{{ url_for(user2, uid3) }}/p {# /user?uid3 #}
/body
/html页面访问
代码分析
使用 {# #} 进行注释注释的内容不会在html中被渲染出来
{# h1{{ title }}!!/h1#}
{# p{{ data_list }}/p#}
{# p{{ data_list.1 }}/p#}p{{ data_list[-1]}}/pp{{ data_list | last }}/pp{{ data_list | first }}/pp{{ data_dict }}/pp{{ data_dict.name }}/pp{{ user_list.0 }}/p
{# p{{ user_list.0.name }}/p#}##模板中内置的变量和函数
你可以在自己的模板中访问一些 Flask 默认内置的函数和对象
####config
你可以从模板中直接访问Flask当前的config对象:
p{{ config.ENV }}/p
p{{ config.DEBUG }}/p####request
就是flask中代表当前请求的request对象
p{{ request.url }}/p
p{{ request.path }}/p
p{{ request.method }}/p####session
为Flask的session对象显示session数据 {{session.get(uname)}}####g变量
在视图函数中设置g变量的 name 属性的值然后在模板中直接可以取出 {{ g.name }}
####url_for()
url_for会根据传入的路由器函数名,返回该路由对应的URL,在模板中始终使用url_for()就可以安全的修改路由绑定的URL,则不比担心模板中渲染出错的链接: p{{ url_for(user1, uid3) }}/p {# /user/3 #}p{{ url_for(user2, uid3) }}/p {# /user?uid3 #}浏览器查看
如果我们定义的路由URL是带有参数的,则可以把它们作为关键字参数传入url_for(),Flask会把他们填充进最终生成的URL中:
{{ url_for(index, id1)}}
/index/1 {# /index/int:id id被声明成路由参数 #}
/index?id1 {# /index id被声明成查询参数 #}总结
flask内置的模板引擎Jinja2它的设计思想来源于 Django 的模板引擎DTP(DjangoTemplates)并扩展了其语法和一系列强大的功能。学会使用Jinja2自己可以轻松开发出一个自己喜欢的网站 我们在模板中多用变量少用函数函数放在视图函数中使用这才符合MVT思想的路线。喜欢的朋友可以一键三连flask高阶用法持续更新中