Flask 模版Jinjia2语法及网页
Django 的模板语言是 render_tempalte,Flask 的模板语言呢是jinja2,jinja2包含 render_tempalte.Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。在Python中, 什么是模版?就是在一个静态HTML加入一些类似变量的标签,然后引擎在渲染这个HTML时候会动态的把变量填入内容, 生成一个最终的HTML。 什么是模版引擎?其实就是一种能解析类似Python语言的标记语言的解释器。
Jinja2 的语法和 Python 大致相同,你在后面会陆续接触到一些常见的用法。在模板里,你需要添加特定的定界符将 Jinja2 语句和变量标记出来,下面是三种常用的定界符:
{ { … }} 用来标记变量。
{% … %} 用来标记语句,比如 if 语句,for 语句等。
{# … #} 用来写注释。
模板中使用的变量需要在渲染的时候传递进去,具体我们后面会了解。
网页
Html5网页代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{
{ name }}'s Watchlist</title>
</head>
<body>
<h1 align="center">Flask 模版Jinjia2语法</h1>
<p>
Django 的模板语言是 render_tempalte,Flask 的模板语言呢是jinja2,jinja2包含 render_tempalte.<br>
Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。在Python中,<br>
什么是模版?就是在一个静态HTML加入一些类似变量的标签,然后引擎在渲染这个HTML时候会动态的把变量填入内容,<br>
生成一个最终的HTML。 什么是模版引擎?其实就是一种能解析类似Python语言的标记语言的解释器。<br>
inja2 的语法和 Python 大致相同,你在后面会陆续接触到一些常见的用法。<br>
在模板里,你需要添加特定的定界符将 Jinja2 语句和变量标记出来,下面是三种常用的定界符:<br>
}} 用来标记变量。<br>
%%} 用来标记语句,比如 if 语句,for 语句等。<br>
#} 用来写注释。<br>
模板中使用的变量需要在渲染的时候传递进去,具体我们后面会了解。<br>
</p>
<hr> <hr>
{% if openif %} {# if 语句 ,注释#}
<h1>一、变量获取</h1>
<div>
<h3>变量:{
{ openif }}</h3>
<h3>列表变量:{
{mylist[0]}}</h3>
<h3>字典变量:{
{mydict["type"]}}</h3>
<h3>函数变量:{
{myfunc()}}</h3>
<h3>类变量:{
{myclass.name}}</h3>
<h3>类方法变量:{
{myclass.func()}}</h3>
</div>
{% endif %}
<hr>
<br>
<hr>
<h1>二、详细历遍</h1>
<h2>1、列表{
{ name }}'s Watchlist</h2>
{# 使用 length 过滤器获取 movies 变量的长度 #}
<p>{
{ thelist|length }} Titles</p>
<ul>
{% for movie in thelist %} {# 迭代 movies 变量 #}
<li>{
{ movie.title }} - {
{ movie.year }}</li> {# 等同于 movie['title'] #}
{% endfor %} {# 使用 endfor 标签结束 for 语句 #}
</ul>
<ul>
{% for value in simlist %}
<li>{
{ value }}</li>
{% endfor %}
</ul>
<hr>
<br>
<h2>2、字典</h2>
<div>{
{ thedict }}</div>
<table border="1px" width="400">
<tr>
<td>{
{ thedict.name }}</td>
<td>{
{ thedict["age"] }}</td>
<td>{
{ thedict.get("gender") }}</td>
</tr>
</table>
<br>
<table border="1px" width="400">
{% for key,value in dict2dict.items() %}
<tr>
<td>{
{ key }}</td>
<td>{
{ value}}</td>
<td>{
{ value.name }}</td>
<td>{
{ value.get("age") }}</td>
<td>{
{ value["gender"] }}</td>
</tr>
{% endfor %}
</table>
<br>
<table border="1px" width="400">
{% for foo in dict2dict %} {#在遍历字典的时候,foo 其实是相当于拿出了字典中的Key#}
<tr>
<td>{
{ foo }}</td>
<td>{
{ dict2dict.get(foo).name }}</td>
<td>{
{ dict2dict[foo].get("age") }}</td>
<td>{
{ dict2dict[foo]["gender"] }}</td>
</tr>
{% endfor %}
</table>
<hr>
<br>
<h2>3、函数</h2>
局部函数
<ul>
<li> {
{ funsum }} </li>
<li> {
{ funsum(99,1) }} </li>
</ul>
全局函数
<ul>
<li> {
{ globalsum(100,99) }} </li>
<li> {
{ 1|globalsum2(100,200) }} </li>
</ul>
模版函数
{% macro type_text(name,type) %}
<input type="{
{ type }}" name="{
{ name }}" value="{
{ name }}">
{% endmacro %}
<p>在下方是使用宏来生成input标签</p>
{
{ type_text("one","text") }}
{
{ type_text("two","text") }}
<hr>
<br>
<h2>4、类</h2>
<table border="1px" width="600">
<tr>
<td>{
{ book.name }}</td>
<td>{
{ book.author }}</td>
<td>{
{ book.data }}</td>
<td>{
{ book.version }}</td>
</tr>
<tr>
<td> {
{ book.sell('开端',100) }}</td>
</tr>
</table>
</body>
<br>
<footer>
<p>
参考:https://blog.csdn.net/weixin_44986037?type=blog<br>
https://www.cnblogs.com/konghui/p/10555062.html <br>
https://www.cnblogs.com/dachenzi/p/8242713.html
</p>
<small>© 2023 <a href="https://blog.csdn.net/weixin_44986037?type=blog">深度学习吧Mycat</a></small>
</footer>
<br> <br> <br> <br>
</html>
Flask后端代码
from flask import Flask, render_template
app = Flask(__name__)
class Book:
def __init__(self,name,author,data,version):
self.name = name
self.author = author
self.data = data
self.version = version
def sell(self,bookName,price):
print("%s的销售价格为%d" %(bookName,price))
return bookName+"的销售价格为"+str(price)
book=Book('开端','zhaojinmai','未来已来赶紧提桶','version1')
class MyClass:
name='this my name'
def func(self):
return "func"
def ord_func():
return "Ordinary function"
#定义一个函数,把它传递给前端
def funsum(a,b):
return a+b
@app.template_global() # 定义全局模板函数
def globalsum(a, b):
return a + b
@app.template_filter() # 定义全局模板函数
def globalsum2(a, b, c):
return a + b + c
@app.route("/")
def index():
#----------- 一、变量 --------------------
# 1.变量
openif="on" #测试if语句
# 2.字典
mydict = {
}
mydict["type"]= "dict"
# 3.列表
mylist = []
mylist.append("list")
# 4。类
myclass = MyClass()
#------------ 二、历遍 ---------------------
#1、变量
name = 'Jin Mai'
# 2、列表(字典)
thelist=[
{
'title': 'My Neighbor Totoro', 'year': '1988'},
{
'title': 'Dead Poets Society', 'year': '1989'},
{
'title': 'A Perfect World', 'year': '1993'},]
simlist=['1.line','2.line','3.line']
#3、字典
thedict={
'name': 'Old', 'age': 38, 'gender': '中'}
dict2dict={
1: {
'name': 'Old', 'age': 38, 'gender': '中'},
2: {
'name': 'Boy', 'age': 73, 'gender': '男'},
3: {
'name': 'EDU', 'age': 84, 'gender': '女'},}
return render_template("test.html",
mydict=mydict, mylist=mylist,myclass=myclass,
myfunc = ord_func,openif=openif,name=name,
thelist=thelist,simlist=simlist,thedict=thedict,
dict2dict=dict2dict,funsum=funsum,book=book
)
if __name__ == '__main__':
app.run(debug=True)
参考:
https://www.cnblogs.com/konghui/p/10555062.html
https://www.cnblogs.com/dachenzi/p/8242713.html
https://tutorial.helloflask.com/template/