fastapi 显示一个数组按照excel形式在页面显示,含html ,css 单元格内容可以编辑
时间: 2024-09-29 13:09:10 浏览: 52
led数字样式css,html显示led数字
5星 · 资源好评率100%
要在FastAPI应用中展示一个数组以Excel表格形式显示,并且单元格内容可以编辑,我们可以结合HTML、CSS和JavaScript。这里提供一个简化的例子,假设我们已经在FastAPI中获取到了一个数据数组。首先,我们需要准备HTML、CSS和JavaScript代码,并在FastAPI中渲染这个模板。
1. **创建HTML和CSS文件**:
- 在项目根目录下的`templates`目录下,创建一个`excel_table.html`文件:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Excel-like Table</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<table id="edit-table" contenteditable="true">
<thead>
<tr>
<!-- 根据实际数据结构添加列头 -->
<th>Header 1</th>
<th>Header 2</th>
<!-- 添加更多列头 -->
</tr>
</thead>
<tbody>
{% for row in data %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
<button onclick="saveChanges()">Save Changes</button>
</div>
<script src="scripts.js"></script>
</body>
</html>
```
- 同样,在`templates`目录下创建`styles.css`文件,加入基本样式:
```css
.container {
width: 100%;
max-width: 800px;
margin: auto;
}
#edit-table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
padding: 10px;
vertical-align: top;
text-align: center;
cursor: pointer;
}
```
2. **处理数据和渲染模板**:
在FastAPI应用中,假设你已经有了一个`data`列表,可以像下面这样渲染模板并返回:
```python
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
import jinja2
app = FastAPI()
@app.get("/excel_table")
async def show_excel_table():
# 假设你有如下数据
data = [
['Value 1', 'Value 2'],
['Value 3', 'Value 4'],
# 更多行...
]
env = jinja2.Environment(loader=jinja2.FileSystemLoader("templates"))
template = env.get_template("excel_table.html")
context = {
"data": data
}
response = HTMLResponse(content=template.render(context))
response.headers["Content-Type"] = "text/html; charset=utf-8"
return response
# JavaScript 保存功能的简单实现(假设放在scripts.js文件)
function saveChanges() {
// 这里只是一个示例,你需要根据实际情况(比如前端框架、AJAX等)处理数据并发送到服务器
var rows = document.querySelectorAll('#edit-table tbody tr');
var newData = [];
rows.forEach(function(row) {
newData.push(Array.from(row.children).map(cell => cell.innerText));
});
// 对newData进行操作并发送到服务器
}
```
请注意,这只是一个基础的示例,实际应用中可能需要更复杂的数据管理、错误处理和客户端验证。同时,由于浏览器安全限制,某些编辑行为可能需要使用服务器端处理。在保存数据时,记得使用适当的HTTP请求(例如POST),并且处理好服务器端对编辑后的数据的接收和保存。
阅读全文