show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次了解了渲染模板相关的内容
- 可以将后台的变量 渲染到前台的页面模版上
- 关于模版可以有继承关系吗?
- 可以包含某个类库
- 使用include的方式实现
mkdir mypro
cd mypro
mkdir templates
vi templates/test.html
- 编辑模版
- templates/test.html
aaa<br/>
{% include 'lib.html'%}<br/>
bbb<br/>
- 保存
- :e app.py
from flask import render_template
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return render_template('test.html')
if __name__ == "__main__":
app.run(debug=True)
- w|!nohup python3 % >> flask.log 2>&1 &
- 后台运行当前app.py
- !firefox http://localhost:5000 &
- 后台打开火狐浏览
- 模版lib.html 没有找到
- 导致渲染失败
- 为什么会这样?
- 路由到/的函数
- 需要渲染test.html
- test.html
- 需要渲染lib.html
- 而lib.html找不到
- 导致lib.html渲染失败
- :e templates/lib.html
- 编辑templates/lib.html
i am a liberary
- :w
- 保存
- 这个模式是
- 基本模式和子模版
- 这如何理解?
- 简历模版
- 这篇简历是基础版base
- 需要填空完成
vi templates/base.html
- 建立base
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
- 需要填空的区域
- block title
- block head
- block content
- block footer
- 下面准备填表
vi templates/subpage.html
- 编写模版subpage.html
{% extends "base.html" %}
{% block title %}Index{% endblock %}
- 基于base.html
- 只填写了 block title
:e app.py
- 重写主程序
from flask import render_template
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route('/')
def login():
return render_template('subpage.html')
if __name__ == "__main__":
app.run(debug=True)
-
将根(/)
- 路由到subpage.html模版上
-
:!firefox view-source:http://localhost:5000/
- 浏览源文件
- 原来的框架结构
- 都进行展示
-
子模版 填充
- 模版中的模版项
-
title这个空
- 正确填写了内容
-
继续填写head
- 填写head
:e templates/subpage.html
- 使用super
- 保留head标签中
- 父级块中原本的内容
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
- 在原来head的基础上
- 加上css的效果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
- :w
- 保存
- :!firefox view-source:http://localhost:5000/
- 浏览源文件
- 在head元素中
- 保留了原来的元素
- 新增了一条css元素
- 可以有一个类important
- 应用这条css样式吗?
:e templates/subpage.html
- 编辑子页面
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome on my awesome homepage.
</p>
{% endblock %}
- 填充了content部分
- 并且应用样式
- 原始base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
- 我想在原来的footer之上
- 输出从0到5
from flask import render_template
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route('/')
def login():
return render_template('subpage.html',nums = range(6))
if __name__ == "__main__":
app.run(debug=True)
- 保存后
- subpage.html应该能接收到
- nums = range(6)
- 具体怎么用呢?
- 运行成功
- 试着给subpage.html传一个参数试试
- 将range(10)作为参数
- 传给subpage.html
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome on my awesome homepage.
</p>
{% endblock %}
- 接受参数
- 并使用循环渲染
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome on my awesome homepage.
</p>
{% endblock %}
{% block footer %}
{% for num in nums %}
{{num}}
{% endfor %}
{{ super() }}
{% endblock %}
- 渲染成功
- 这次研究了 jinja2模版
- 可以 直接导入模板
- 也可以有 一个 父类模板
- 然后 使用子模版 对父模板 进行填充
- 而且 可以 把参数 传递进去
- 可以把 网页传递的参数
- 存储进 数据库吗?
- 下次再说!