python开发html教程_在Python中使⽤HTML模版的教程
Web框架把我们从WSGI中拯救出来了。现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了。
但是,Web App不仅仅是处理逻辑,展⽰给⽤户的页⾯也⾮常重要。在函数中返回⼀个包含HTML的字符串,简单的页⾯还可以,但是,想想新浪⾸页的6000多⾏的HTML,你确信能在Python的字符串中正确地写出来么?反正我是做不到。
俗话说得好,不懂前端的Python⼯程师不是好的产品经理。有Web开发经验的同学都明⽩,Web App最复杂的部分就在HTML页⾯。HTML不仅要正确,还要通过CSS美化,再加上复杂的JavaScript脚本来实现各种交互和动画效果。总之,⽣成HTML页⾯的难度很⼤。
dialog怎么读?由于在Python代码⾥拼字符串是不现实的,所以,模板技术出现了。
使⽤模板,我们需要预先准备⼀个HTML⽂档,这个HTML⽂档不是普通的HTML,⽽是嵌⼊了⼀些变量和指令,然后,根据我们传⼊的数据,替换后,得到最终的HTML,发送给⽤户:
亚马逊商城这就是传说中的MVC:Model-View-Controller,中⽂名“模型-视图-控制器”。
Python处理URL的函数就是C:Controller,Controller负责业务逻辑,⽐如检查⽤户名是否存在,取出⽤户信息等等;
包含变量{{ name }}的模板就是V:View,View负责显⽰逻辑,通过简单地替换⼀些变量,View最终输出的就是⽤户看到的HTML。MVC中的Model在哪?Model是⽤来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。
上⾯的例⼦中,Model就是⼀个dict:
{ 'name': 'Michael' }
只是因为Python⽀持关键字参数,很多Web框架允许传⼊关键字参数,然后,在框架内部组装出⼀个dict作为Model。
现在,我们把上次直接输出字符串作为HTML的例⼦⽤⾼端⼤⽓上档次的MVC模式改写⼀下:
from flask import Flask, request, render_template
app = Flask(__name__)
@ute('/', methods=['GET', 'POST'])
def home():
return render_template('home.html')
@ute('/signin', methods=['GET'])
def signin_form():
return render_template('form.html')
@ute('/signin', methods=['POST'])
def signin():
username = request.form['username']
password = request.form['password']
if username=='admin' and password=='password':
return render_template('signin-ok.html', username=username)
return render_template('form.html', message='Bad username or password', username=username)
if __name__ == '__main__':
app.run()
Flask通过render_template()函数来实现模板的渲染。和Web框架类似,Python的模板也有很多种。Flask默认⽀持的模板是jinja2,所以我们先直接安装jinja2:
$ easy_install jinja2
然后,开始编写jinja2模板:
home.html
⽤来显⽰⾸页的模板:
Home
Home
form.html
⽤来显⽰登录表单的模板:
Please Sign In
{% if message %}aspire电子烟完整说明书
{{ message }}
{% endif %}
Please sign in:
Sign In
signin-ok.html
登录成功的模板:
Welcome, {{ username }}
Welcome, {{ username }}!
登录失败的模板呢?我们在form.html中加了⼀点条件判断,把form.html重⽤为登录失败的模板。
ff是什么浏览器最后,⼀定要把模板放到正确的templates⽬录下,templates和app.py在同级⽬录下:
启动python app.py,看看使⽤模板的页⾯效果:
通过MVC,我们在Python代码中处理M:Model和C:Controller,⽽V:View是通过模板处理的,这样,我们就成功地把Python代码和HTML代码最⼤限度地分离了。
使⽤模板的另⼀⼤好处是,模板改起来很⽅便,⽽且,改完保存后,刷新浏览器就能看到最新的效果,这对于调试HTML、CSS和JavaScript的前端⼯程师来说实在是太重要了。
在Jinja2模板中,我们⽤{{ name }}表⽰⼀个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在Jinja2中,⽤{% ... %}表⽰指令。
⽐如循环输出页码:
{% for i in page_list %}
{% endfor %}
如果page_list是⼀个list:[1, 2, 3, 4, 5],上⾯的模板将输出5个超链接。
除了Jinja2,常见的模板还有:
Mako:⽤和${xxx}的⼀个模板;
Cheetah:也是⽤和${xxx}的⼀个模板;python入门教程app
Django:Django是⼀站式框架,内置⼀个⽤{% ... %}和{{ xxx }}的模板。
matlab算复杂方程组⼩结
有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板⾥,写起来更有效率。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论