Flask of Python 学习笔记2_complate

版权声明:仅限学习,联系方式:qq:516214485。博客中涉及到的技术可能存在破坏性,禁止使用于包括学习之外其他用途,如造成法律责任,博主概不负责! https://blog.csdn.net/huanghelouzi/article/details/82665546

flask of python compalte的使用

如果不使用模板的话,直接把界面的html文件字符串return,会使得python文件里包含过多的静态文件,使得项目变得不可维护。

#!/usr/bin/env python3
# -*-coding:utf8-*-
# power by jedi
from flask import Flask, request
app = Flask(__name__)
@app.route("/login", methods=["GET"])
def login():
    html = "<form method='post'>" \
        "<table>" \
        "<tr><td>请输入用户名</td><td><input type='text' name='username'/></td></tr>" \
        "<tr><td>请输入密码</td><td><input type='password' name='password'/></td></tr>" \
        "<tr><td><input type='submit' value='登录'/></td></tr>" \
        "</table>" \
        "</post>"
    return html
# post response page
@app.route("/login", methods=["POST"])
def login_post():
    username = request.form.get("username")
    password = request.form.get("password")
    if username == "jedi" and password == "123456":
        return "login seccuss"
    else:
        return "login failed"


if __name__ == '__main__':
    app.run(debug=True)

flask模板简介

我们要把页面html部分独立出来,flask提供了jinja2模板引擎来实现。

jinja2模板引擎同样符合flask最基础的约定,即众多配置中都有一个基础的默认值,相对jinja2来说,有一个最重要的默认值,即模板文件放在templates文件夹,这个文件夹虽然可以自定义,但目前来说,使用默认值已经足够了。
如果需要自定义模板文件夹,可以在@app.route()的参数中设置。

简单的登陆界面模板

先在当前项目的目录下创建一个目录templates(默认,可以更改),然后把静态的html文本分离出来,新建一个login.html

<!DOCTYPE html>
<html>
<head>
	<title>welcome loging, myBlog</title>
</head>
<body>
	<form method="post">
		<table>
		<tr>
			<td>username</td><td><input type="text" name="username"></td>
		</tr>
		<tr>
			<td>password</td><td><input type="password" name="password"></td>
		</tr>
		<tr>
			<td><input type="submit" name="submit"></td>
		</tr>
		</table>
	</form>
</body>
</html>

然后在上级的目录新建login.py

from flask import Flask, render_template#页头,导入渲染函数
app = Flask(__name__)
@app.route("/login", methods=["GET","POST"])
def loging():
    return render_template("/login.html")
if __name__ == '__main__':
    app.run(debug=True)

自定义网页标题和向木板中传入参数:
python脚本

from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def index():
    return render_template("index.html", site_name="my_blog")
if __name__ == '__main__':
    app.run(debug=True)

index.html文件:

<!DOCTYPE html>
<html>
<head>
	<title>{{site_name}}</title>
</head>
<body>
	<h3>This site name is : {{site_name}}</h3>
</body>
</html>

界面返回This site name is : my_blog,同时网页的title也变成my_blog

flask的render_template函数支持多参数,其中函数的第一个参数为模板名,之后可以提供若干参数,均为键值对,为模板中的变量提供数据。如此例子中,为site_name提供了myblog的值,而模板内使用{{参数名}}来表示一个变量

过滤器

inja2模板还提供了一些变量过滤器

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>{{site_name|upper}}</title>
</head>
<body>
<h1>这个站点的名字为 {{site_name}} </h1>
</body>
</html>

safe 不转义
capitalize 首字母大写
lower 转换为小写
upper 转换为大写
trim 去收尾空格
striptages 去除html标签

控制语句

if 语句

<!DOCTYPE html>
<html>
<head>
	<title>{{site_name}}</title>
</head>
<body>
	<h3>This site name is : {{site_name}}</h3>
	<h4>if :</h4>
	{%if name == "test"%}
		this is {{name}}
	{%else%}
		hello {{name}}
	{%endif%}
</body>
</html>

for 语句


if and for 语句应用
index.html

<!DOCTYPE html>
<html>
<head>
	<title>{{site_name}}</title>
</head>
<body>
	<h3>This site name is : {{site_name}}</h3>
	<h4>if :</h4>
	{%if name == "test"%}
		this is {{name}}
	{%else%}
		hello {{name}}
	{%endif%}
	<h4>for :</h4>
	{%for key, value in blogs.items()%}
		<p>{{key}}----{{value}}</p>
	{%endfor%}
</body>
</html>

index.py

from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def index():
    names = {
        "username": "jedi",
        "password": "123456"
    }
    return render_template("index.html", site_name="my_blog", name="test1", blogs=names)
if __name__ == '__main__':
    app.run(debug=True)

网页输出

This site name is : my_blog
if :
hello test1
for :
username----jedi
password----123456

模板继承

首先需要创建一个基模板

<!DOCTYPE html>
<html>
<head>
	{%block head%}
	<title>
		{%block title%}{%endblock%}
	</title>
	{%endblock%}
</head>
<body>
	{%block body%}{%endblock%}
</body>
</html>

其中的block标签表示可以任意的在子模板中修改
下面的是子模板代码

{% extends "base.html" %}
{% block title %}{{site_name[2:]}}{% endblock %}
{% block head %}
 {{super()}}
{% endblock %}
 
{% block body %}
 <h1>这个站点的名字为 {{site_name}} </h1>
{% endblock %}

猜你喜欢

转载自blog.csdn.net/huanghelouzi/article/details/82665546