资讯专栏INFORMATION COLUMN

3.render_template渲染模板及jinja2

lemon / 3470人阅读

摘要:用浏览器访问这个地址,显示结果如下那么为何称之为模板呢因为不仅能渲染静态的文件,也能传递参数给,使一个模板根据参数的不同显示不同的内容,这是因为使用了这个模板引擎。

我们之前的视图函数,返回的都是简单的"Hello Wolrd"之类的字符串,怎么返回一个html呢?首先我们在templates文件夹建立一个html文件,内容随便写一点如下:




    
    Index


This is index page

我们可以使用Flask对象appsend_static_file方法,使视图函数返回一个静态的html文件,但现在我们不使用这种方法,而是使用flaskrender_template函数,它功能更强大。
flask中导入render_template,整体代码如下:

from flask import Flask, render_template
import config

app = Flask(__name__)
app.config.from_object(config)


@app.route("/")
def index():
    return render_template("index.html")

if __name__ == "__main__":
    app.run()

render_template函数会自动在templates文件夹中找到对应的html,因此我们不用写完整的html文件路径。用浏览器访问"/"这个地址,显示结果如下:

那么为何称之为模板呢?因为render_template不仅能渲染静态的html文件,也能传递参数给html,使一个html模板根据参数的不同显示不同的内容,这是因为flask使用了jinja2这个模板引擎。要使用模板,在render_template参数中以key=value形式传入变量,在html中使用{{key}}来显示传入的变量,例如:

# 视图函数
@app.route("/")
def index():
    return render_template("index.html", contents="This is index page")

# html



    
    Index


{{ contents }}

浏览器显示的结果与上文是一样的。我们还可以直接把一个类的实例传递过去,并在模板中访问类的属性,例如假设一个类对象objab属性,关键部分的代码如下:

# 视图函数中
return render_template("index.html", object=obj)

...
# html中

a: {{ object.a }}

b: {{ object.b }}

传入一个字典也可以,并且在模板中既可以用dict[key],也可以用dict.key


使用过滤器,可以在html中对传入的变量进行处理,其格式是{{ 变量 | 过滤器 }},例如将前文的{{ contents }}修改为{{ contents | upper}},浏览器显示的内容就变成了:

所以我们可以很容易就理解,过滤器其实就是以变量为参数的函数,返回处理后的结果,在后端一样可以先用字符串对象的upper()函数处理好再传递给模板,效果是完全一样的。jinja2自带了一些过滤器,例如length/reverse/lower等等 ,并且我们也可以自己按照需求自定义过滤器,模板还支持{{ 变量 | 过滤器1 | 过滤器2 | ... }}这样的操作。想要深入了解的话,可以搜索jinja2过滤器去进一步学习。


模板中还可以使用if elsefor in控制语句,与变量使用{{ }}不同,控制语句要放在{% %}里,例如前文的contents传入一个list:

contents=[i for i in range(10)]

html中代码如下:

{% for i in contents %} {{ i }}{# 注意i也要用两个大括号 #} {% endfor %}

使用for遍历contents的内容,并用{{ i }}显示出来,同时还用{# #}加了一个注释,还要注意需要使用{% endfor %}来提示循环区域的结束,因为html不像python那样通过缩进来判断循环的区域,if也是同理。浏览器显示结果:

最后forif结合使用:

header

{% for i in contents %}

{% if i%2 == 0 %} {{ i }}是偶数{# 注意i也要用两个大括号 #} {% else %} {{ i }}是奇数 {% endif %}

{% endfor %}

结果如下(只是演示一下,不要吐槽排版和美观):

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41243.html

相关文章

  • django中的配置文件

    摘要:默认的,及使用它的号数据库此处使用号数据库,在客户端查看记得切换数据库存储在本机内存中,比数据库的方式读写快很多默认的配置项,采用号库。状态保持的配置项,采用号库。使用名为的配置项存储数据。配置完成后运行程序,测试结果。 1.配置开发环境当进入虚拟环境,通过django_admin创建一个项目后,会在项目同名目录生成一个setting.py文件。而实际项目过程中会有不同的环境,如开发环境、生...

    番茄西红柿 评论0 收藏0
  • django中的配置文件

    摘要:默认的,及使用它的号数据库此处使用号数据库,在客户端查看记得切换数据库存储在本机内存中,比数据库的方式读写快很多默认的配置项,采用号库。状态保持的配置项,采用号库。使用名为的配置项存储数据。配置完成后运行程序,测试结果。 1.配置开发环境当进入虚拟环境,通过django_admin创建一个项目后,会在项目同名目录生成一个setting.py文件。而实际项目过程中会有不同的环境,如开发环境、生...

    williamwen1986 评论0 收藏0
  • Flask Web Development —— 模板(上)

    摘要:用真实的值替换变量并返回最终响应字符串,这个过程称为渲染。示例展示模板实现该响应。控制结构提供一些控制结构用于改变模板流。这个示例展示如何使用循环做到这些同样支持宏,这和代码中的函数很像。 写代码最关键的是要易于维护且结构清晰整洁。目前为止,你看到的例子都过于简单从而没有做这方面的要求。Flask视图函数希望将两个应该完全独立的任务一并处理,两个任务有两种代码,一并处理势必会引发问题。...

    fizz 评论0 收藏0
  • FlaskWeb开发读书笔记之jinja2模板

    摘要:注模板包含不存在此问题。在模板中,使用过滤器显式地标记一个字符串为安全的临时地完全禁用自动转义系统。通过在声明中直接添加或,当前的上下文可以传递到模板,而且不会自动禁用缓存。 官网:http://jinja.pocoo.org/docs/dev/中文文档:http://docs.jinkan.org/docs/j...当前版本2.8 安装:pip install Jinja2Flask...

    tangr206 评论0 收藏0
  • Flask框架基础(二)

    摘要:处理和函数之间关系的程序称为路由。模板引擎是由实现的是内置的模板语言参照设计思想设计的,跟差不多渲染模板默认情况下,在程序文件夹中的子文件夹中寻找模板。如果需要可在文件夹中使用子文件夹存放文件。 1 程序的基本结构 1.1初始化 所有Flask 程序都必须创建一个程序实例。Web 服务器使用一种名为Web 服务器网关接口(Web Server Gateway Interface,WSG...

    lpjustdoit 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<