pythonflask实现博客系统_PythonWeb开发基于flask的博客系
统教程(3。。。
在上⼀篇中,我们学习了关于前端框架与使⽤模板的⼀些知识,知道如何在模板中调⽤传⼊的参数以及如何继承模板以减少重复的代码,但是仅仅这些还是不太够的,有时候我们还需要对传⼊的参数进⾏⼀些判断与操作,所以这⼀篇我们来深⼊了解⼀下flask在渲染模板时的⼀些其他操作
⼀、模板接受的数据类型
在python中数据有各种各样的类型,⽐如字符串、整数等等,⽽在模板中也是可以接受不同类型的数据,jinja2⽀持python的所有数据类型,包括字符串、整数、浮点数、列表、字典、对象等,在模板中的使⽤⽅法也和在python中⽆异。
⼆、过滤传⼊的数据
上⼀篇我们在模板中使⽤{{ user }}这样的语句,⽤变量名来调⽤传⼊的参数,但有时候我们需要对变量进⾏⼀些处理,⽐如将结构性带html标签的⽂章传⼊模板中,如果不进⾏处理就会出现⽂章⽆法正常显⽰,所以对于变量进⾏过滤就显得⾮常重要啦
jinja默认对传⼊的变量进⾏转义,即传⼊html语句或js语句,在渲染出的页⾯⾥的是⽆法执⾏的,⽽是显⽰为普通的字符。
要想变量正常显⽰我们就需要⽤到过滤器,jinja2提供许多的过滤器,这⾥展⽰⼏个常⽤的过滤器(更多过滤器请访问jinja2⽂档的List of Builtin Filters查看)
过滤器
作⽤
safe()
不对内容进⾏转义
striptags()
去除内容所有的html标签
trim()
去除内容⾸尾空⾏
过滤器的⽤法为{{ user|safe }}
让我们来测试⼀下吧
frog.py
@ute('/filter')
def test_filter():
return render_template('filter.html',words='
hello filter!
')
templates/filter.html
{% extends 'base.html' %}
{% block title %}filter{% endblock %}
{% block content %}
转义: {{ words }}
不转义: {{ words|safe }}
去除html标签: {{ words|striptags }}
{% endblock %}
三、数据的判断与渲染
有时候我们需要对传⼊模板的数据进⾏判断,满⾜某种条件才会渲染出某些部分,否则渲染另⼀种部分,让我们来看看如何实现吧!frog.py
@ute('/age/')
def age(myage):
return render_template('age.html',myage=myage)
templates/age.html
{% extends 'base.html' %}
{% block title %}你多⼤了?{% endblock %}
{% block content %}
{% if myage<=12 %}
你是⼀名少年
{% elif myage <18 %}
你是⼀名青少年
{% else %}
你是⼀名成年⼈
{% endif %}
{% endblock %}
我们来测试⼀下
前端页面模板在模板中我们⽤{%%}包裹着判断语句,⼀旦满⾜条件就渲染判断语句下的部分,判断部分由{% if ... %}开头,{% endif %}结尾。四、遍历数据
既然jinja2⽀持传⼊列表、字典之类的数据类型,那在模板中也应当⽀持循环遍历数据的,写法也是⽤{%%}包裹,让我们来看看吧!frog.py
@ute('/for')
def for_return():
fruits=['apple','orange','watermelon']
profile1={'id':1,'name':'Felix','sex':'male','height':'178cm','weight':'74kg'}
profile2={'id':2,'name':'Lily','sex':'female','height':'169cm','weight':'50kg'}
profiles=[profile1,profile2]
return render_template('for.html',fruits=fruits,profiles=profiles)
templates/for.html
{% extends 'base.html' %}
{% block title %}遍历数据{% endblock %}
{% block content %}
我喜欢的⽔果
{% for fruit in fruits %}
{{ fruit }}
{% endfor %}
个⼈信息表
id
name
sex
height
weight
{% for profile in profiles %}
{{ profile['id'] }}
{{ profile['name'] }}
{{ profile['sex'] }}
{{ profile['height'] }}
{{ profile['weight'] }}
{% endfor %}
{% endblock %}
然后我们测试⼀下
在模板中我们使⽤{% for item in items %}......{{ item }}......{% endfor %},这样的形式来循环迭代数据
五、模板中的函数(宏)
有时候我们需要为某些对象数据⽣成⼀种特定的结构样式,但经常会出现需要渲染许多结构相同只是部分数据不同的组件,这时宏就⾮常有必要了,宏类似于函数,我们输⼊⼀些参数,便渲染出带有参数数据的⼀种特定结构样式,我们来试试看吧!
frog.py
@ute('/tags')
def tags():
return render_template('tags.html')
templates/tags.html
{% extends 'base.html' %}
{% block title %}标签{% endblock %}
{% block content %}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。