FastAPI中Jinjia2使用

FastAPI中Jinjia2使用

简介

  • Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

安装和初次使用

  1. 安装
pip install Jinjia2
pip install aiofiles # 适用于FastAPI
  1. 初次使用
  • Python代码
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates

app = FastAPI() # 实例化 FastAPI对象
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹

@app.get('/')
def hello(request: Request):
    return templates.TemplateResponse(
        'index.html', 
        {
            'requset': requset, # 注意,返回模板响应时,必须有request键值对,且值为Request请求对象
            'word': 'Hello World'
        }
    )
  • index.html
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinjia2 Hello worldtitle>
head>
<body>
    <div>
        显示的文字为:<br>
        <h1>{{word}}h1>
        <h2>{{word}}h2>
        <h3>{{word}}h3>
    div>
body>
html>
  • 效果图
    FastAPI中Jinjia2使用_第1张图片

Jinja2模板继承

如果templates文件夹中众多html模板中有许多冗余的地方,例如背景、标题、内容显示、底部等,可以将冗余的Html代码写成base.html当作基类模板,其他模板文件可继承base.html实现同样的效果。

  1. base.html
<html lang="en">
<head>
    <title>Jinja2 继承title>
    {% block head %}

    {% endblock %}    
head>

{% block body %}

{% endblock %}    
html>
  • {% block head %}{% block head %}等是为使用该基类模板的其他模板预留的代码块,其他模板可将对应代码块的代码插入到基类模板中,形成完整的HTML文档。
  1. index.html
{% extends 'base.html' %}
{% block head %}
    <meta charset="UTF-8">
    
    <script src="https://cdn.jsdelivr.net/npm/vue">script>
{% endblock %}    

{% block body %}
    <div>
        Hello,Jinja2 继承
    div><br>
    显示的文字为:
    <br>
    <h1>{{word}}h1>
    <h2>{{word}}h2>
    <h3>{{word}}h3>
{% endblock %} 
  1. index.py
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates

app = FastAPI() # 实例化 FastAPI对象
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹

@app.get('/')
def hello(request: Request):
    return templates.TemplateResponse(
        'index.html', 
        {
            'requset': request, # 注意,返回模板响应时,必须有request键值对,且值为Request请求对象
            'word': 'Hello Jinja2 继承'
        }
    )
  1. 效果图

FastAPI中Jinjia2使用_第2张图片

你可能感兴趣的:(FastAPI,python,后端)