Flask学习总结笔记(3)-- Jinja2模板引擎之一

在MVC架构中,使用模板实现页面的设计与布局是一种非常常见的方式,比如PHP的smarty、J2ee的Freemarker和velocity、.NET的velocity.net等。Jinja2是基于python的模板引擎,具有相似的功能,完全支持unicode,具有集成的沙箱执行环境,应用广泛。

0x01 原始方式

在前面的hello world程序中,我们只是简单返回了一个字符串,但是在Web应用中,我们应该遵循HTML规范,比如我们需要返回一个如下HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>

修改views.py代码如下:

#!flask/bin/python
#coding:utf-8

__author__ = 'kikay'

from app import app

@app.route('/')
@app.route('/index')
def index():
    html='''
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Test</title>
        </head>
        <body>
            <h1>Test</h1>
        </body>
    </html>
    '''
return html

效果如下:

上面的方式非常繁琐,在Python代码中还要注意做好嵌入的HTML代码的格式和转义等等。现在我们在app包文件夹下新建一个templates文件夹,然后在templates文件夹下新建一个firstone.html文件,内容就是我们需要输出的html代码,函数index直接去读取其中的内容,然后输出。views.py如下:

#!flask/bin/python
#coding:utf-8

__author__ = 'kikay'

from app import app

@app.route('/')
@app.route('/index')
def index():
    with open('app/templates/firstone.html','r') as f:
        html=f.read()
    return  html

注意文件路径的问题,这里的路径应该是相对于run.py的路径。

0x02 使用模板

上面第2种方式就是使用模板的雏形。直接看下面的例子(文件app/templates/index.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
</head>
<body>
<h1>hello,{{author.name}}</h1>
</body>
</html>

{{…}}就像是一个占位符,可以将.py中输出的参数“替换”到{{…}}的内容。views.py的代码如下:

#!flask/bin/python
#coding:utf-8

__author__ = 'kikay'

from app import app
from flask import render_template

@app.route('/')
@app.route('/index')
def index():
    author={
        'name':'kikay',
        'age':24
    }
    return render_template('index.html',
                           author=author,
                           title='Welcome')

效果如下:

需要注意的是,如果模板中的{{…}}中的参数在调用的函数中没有定义的话,那么直接替换为空。

在下一篇博客中将总结Jinja2模板引擎的特征与使用方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值