fastapi框架--jinja2

jinja2模版

  • 对比python占位符,模板字符串,模板文件本质。

  • 模板文件、模板渲染

  • 动态文件、动态请求、动态网站

  • 前后端不分离

  • 语法:变量取值{{ }}、控制结构{% %}

  • jinja2是模板引擎

模板语法之变量渲染

文件

  • templates文件夹

    • index.html

  • main.py

# 以下是main.py文件
from fastapi import FastAPI
import uvicorn
from fastapi.templating import Jinja2Templates

app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/index")
def index():
  name = "root"
  age = 32
  books = ["书1","书2","书3","书4"]
  info = {"name":"rain","age":32,"gender":"male"}
  return templates.TemplateResponse(
    "index.html", # 模板文件
    {
        "request":request,
        "user":name,
        "age":32,
        "books":books,
        "info":info
    }, # context上下文对象,一个字典
  )

if __name__ == '__main__':
  uvicorn.run("main.app", port=8090, debug=True, reload=True)
<!-- 以下是index.html文件 -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <p>用户名:{{user}}</p>
  <p>年龄:{{age}}</p>
  <p>四大名著:{{books}}</p>
  <p>《1》:{{books.0}}</p>
  <p>《2》:{{books.1}}</p>
  <p>《3》:{{books.2}}</p>
  <p>《4》:{{books.3}}</p>
  <ul>
    <li>{{books.0}}</li>
    <li>{{books.1}}</li>
    <li>{{books.2}}</li>
    <li>{{books.3}}</li>
  </ul>
  <p>姓名:{{info.name}}</p>
  <p>年龄:{{info.age}}</p>
  <p>性别:{{info.gender}}</p>
</body>
</html>

模板将业务逻辑和页面逻辑分开,隔离。

模版语法之过滤器

  • 变量可通过过滤器修改,过滤器可以看成是jinja2里的内置函数和字符串处理函数。把业务逻辑层的数据在模版语法层做更好的展示。展示层。

  • 在HTML文件里写,格式是“|”加函数名。举例:<p>用户名:{{user | upper}}</p>

  • 常用的有:capitialize首字母大写其余小写;title每个单词首字母转大写;trim去首尾空格;striptages渲染前删HTML标签;join拼接字符串;round四舍五入;safe渲染时不转义

模版语法之控制结构

  • 分支控制

{% if %}

{% endif %}

{% if age>18 %}
  <ul>
    <li>电视剧1</li>
    <li>电视剧2</li>
    <li>电视剧3</li>
  </ul>
{% else %}
  <ul>
    <li>动画片1</li>
    <li>动画片2</li>
    <li>动画片3</li>
  </ul>
{% endif %}
  • 循环控制

{% for book in books %}

<p>{{book}}</p>

{% endfor %}

<ul>
  {% for book in books %}
    <li>{{book}}</li>
  {% endfor %}
</ul>
  • 分支和循环还可以嵌套使用

books = [{"title":"书本1","price":400},
         {"title":"书本2","price":199},
         {"title":"书本3","price":200},
         {"title":"书本4","price":399},
]
<ul>
  {% for book in books %}
    {% if book.price >= 200 %}
      <li>{{book.title}}</li>
    {% endif %}
  {% endfor %}
</ul>


fastapi框架--jinja2
http://localhost:8090//archives/fastapikuang-jia
作者
江敏婕
发布于
2025年03月03日
许可协议