0

0

如何使用HTMX解析FastAPI JSON响应并渲染特定值

DDD

DDD

发布时间:2025-12-05 08:44:12

|

295人浏览过

|

来源于php中文网

原创

如何使用HTMX解析FastAPI JSON响应并渲染特定值

本文详细介绍了在使用htmx与fastapi进行交互时,如何避免直接渲染原始json字符串,而是精确地解析json响应并只显示其中的特定值。通过结合htmx的`hx-trigger`属性与自定义javascript函数,您可以有效地从fastapi的`jsonresponse`中提取所需数据,并将其动态呈现在前端页面上,从而实现更精细的数据渲染控制。

背景与问题描述

在使用FastAPI构建API服务,并结合HTMX进行前端交互时,一个常见的问题是当FastAPI返回JSONResponse时,HTMX默认会将整个JSON字符串作为HTML内容进行渲染,而非解析其中的特定键值。例如,当FastAPI端点返回{"key": "value"}时,HTMX可能会直接显示{"key": "value"},而不是我们期望的value。

以下是一个典型的FastAPI应用示例,它包含一个返回HTML页面的根路径和一个返回JSON数据的API端点:

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.get("/api/v1", response_class=JSONResponse)
async def api_home():
    data = {"key": "value"}
    return data

对应的index.html文件中,使用HTMX尝试获取并显示API数据:

<div class="container">
  <h1 class="h2">API Client</h1>
  <a hx-get="/api/v1" hx-target="#content" hx-swap="innerHTML" class="btn btn-primary">Fetch data</a>
  <div id="content">{{ key | default("No message received") }}</div>
</div>

在这种配置下,点击按钮后,#content元素将显示{"key": "value"},而不是我们期望的value。

Favird No-Code Tools
Favird No-Code Tools

无代码工具的聚合器

下载

解决方案:结合HTMX hx-trigger 与 JavaScript

要解决这个问题,我们需要在HTMX接收到JSON响应后,通过JavaScript手动解析响应内容,并提取我们需要的特定值来更新DOM。这可以通过HTMX的hx-trigger属性配合自定义JavaScript函数来实现。

1. 修改HTMX请求元素

首先,我们需要修改触发API请求的HTMX元素,添加一个hx-trigger属性来调用一个JavaScript函数,并传递必要的参数(例如,XHR对象和目标元素的ID)。

<a hx-get="/api/v1" 
   hx-trigger="fetchCompleted(xhr, 'content')" 
   hx-swap="none" 
   class="btn btn-primary">
  Fetch data
</a>
<div id="content">No message received</div>

关键变化说明:

  • hx-trigger="fetchCompleted(xhr, 'content')": 这会在HTMX请求完成后(无论成功或失败,但通常在成功后处理)触发名为fetchCompleted的JavaScript函数。xhr是HTMX提供的XMLHttpRequest对象,'content'是我们希望更新的DOM元素的ID。
  • hx-swap="none": 由于我们将通过JavaScript手动更新DOM,HTMX的默认交换行为就不再需要了,甚至可能干扰我们的自定义逻辑,因此将其设置为none。

2. 添加JavaScript处理函数

接下来,在页面的底部(通常在

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

456

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

28

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

251

2026.02.06

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号