Flask基础入门四一些基本语句和函数

注释:

模板中的注释使用{# #}来定义,不会出现在生成的HTML中,例如:

{# 这是一个注释 #}

if 语句:

Jinja中的if语句跟Python中的if语句相似,后边的布尔值或返回布尔值的表达式将决定代码中的哪个流程会被执行:

{% if user.is_logged_in()%}

  <a href=’/logout’>Logout</a>

{% else %}

  <a href=’/login’>Login</a>

{% endif %}

过滤器也可以被用在if语句中:

{% if comments | length > 0%}

  There are {{comments | length }} comments

{% else %}

  There are no comments

{% endif %}

 

循环:

我们可以在Jinja中使用循环来迭代任何列表或者生成器函数:

{%for post in posts%}

  <div>

<h1>{{ post.title}}</h1>

<p>{{ post.text | safe}}</p>

  </div>

{% endfor %}

在循环内部,可以使用一个loop的特殊变量来获得关于for循环的一些信息。比如我们想知道当前迭代的元素序号,并模拟Python中enumerate函数做的事情,则可以使用loop变量的index属性。

{% for post in posts%}

   {{ loop.index}} .{{ post.title}}

{% endfor %}

会生成这样的结果:

1 . The Title

2 . Sec Title

下边的表格列出loop对象的所有属性和方法。

变量

描述

Loop.index

当前迭代项的序号(从1开始)

Loop.index0

当前迭代项的序号(从0开始)

Loop.revindex

当前迭代项的逆序序号(从1开始)

Loop.revindex0

当前迭代项的逆序序号(从0开始)

Loop.first

如果当前迭代项是迭代器中的第1个,则返回True

Loop.last

如果当前迭代项时迭代器中的最后一个,则返回True

Loop.length

迭代器的长度

Loop.cycle

进行循环迭代的辅助函数

Loop.depth

表示递归循环时的深度(从1开始)

Loop.depth0

表示递归循环时的深度(从0开始)

Cycle函数会在每次循环的时候,返回其参数中的下一个元素。

{% for post in posts %}

  {{ loop.cycle(‘odd’,’even’)}} {{post.title}}

{% endfor %}

会输出这样的结果:

odd The Title

even Sec Title

 

宏:

对宏(macro)最合适的理解是把它看作Jinja中的一个函数,它会返回一个模板或者HTML字符串。为了避免反复地编写同样的模板代码,可以把它们写成函数以进行重用。例如下边的宏可以在你的模板中添加一个带有label标签且使用Bootstrap CSS的输入框:

{% macro input(name,label,value=’’,type=’text’) %}

  <div class=”form-group”>

<label for”{{name}}”>{{label}}</label>

<input type=”{{type}}” name=”{{ name }}”

  value=”{{ value | escape}}” class=”form-control”>

  </div>

{% endmacro%}

现在可以通过调用这个宏,快速创建一个表单中的输入框:

{{ input(‘name’,’Name’)}}  相当于调用这个函数

 <div class=”form-group”>

<label for”name”>Name</label>

<input type=”text” name=”Name”

  value=”” class=”form-control”>

  </div>

 

Flask特有的变量和函数

 

Config:

可以在模板中直接访问Flask当前的config对象:

{{ config.SQLALCHEMY_DATABASE_URI}}

sqlite:///database.db

 

request:

就是Flask中代表当前请求的request对象:

{{ request.url}}

http://127.0.0.1/

 

session:

Flask中当前的session对象:

{{session.new}}

True

 

url_for():

url_for会根据传入的路由函数名,返回该路由对应的URL。在模板中始终使用url_for()就可以安全地修改路由绑定的URL,而不必担心模板中渲染出错的链接:

{{url_for(‘home’)}}

/

如果我们定义的路由URL是带有参数的,则可以把它们作为关键字参数传入url_for()。Flask会把它们填充进最终生成的URL中。

{{url_for(‘post’,post_id=1)}}

 

get_flashed_messages()

这个函数会返回之前在Flask中通过flash()传入的消息的列表。flash函数的作用很简单,可以把由Python字符串表示的消息加入一个消息队列中,再使用 get_flashed_message函数取出它们并消费掉:

{% for message in get_flashed_messages()%}

{{message}}

{% endfor %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值