jinja2 - 如何使用 JinjaTemplates 渲染和过滤字典列表
问题描述
我是 Fast-API 和 Jinja2 的新手。
我正在寻找通过 Jinja2Template html 页面呈现和过滤列表的正确方法。
我开发了这个 Fast-API :
# Imports
from fastapi import FastAPI, Request
# Environment
app = FastAPI()
templates = Jinja2Templates(directory="static")
# Routes & endpoints
@app.get("/")
async def get_records(request : Request):
my_list = [
{"a": "foo", "b":"bar"},
{"a": "foo1", "b":"bar1"},
{"a": "foo2", "b":"bar2"},
]
return templates.TemplateResponse("items.html", {"request" : request, "my_list" : mylist})
# Main thread
if __name__ == "__main__":
uvicorn.run(app, host='0.0.0.0', port=42)
我也开始写我的 ./static/items.html
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% endblock %}
{% block page_content %}
<div>
Hello team
</div>
# Here is where I want my list mylist to be render with the possibility filter
{% endblock %}
正如我所说,我对 Fast-API 很陌生,我没有在https://fastapi.tiangolo.com/advanced/templates/上找到管理它的方法。
你能帮我找到办法吗?我很确定我必须编写一个 JS 脚本。
解决方案
这是我希望我的列表 mylist 使用可能性过滤器呈现的地方
我不确定您要达到什么目的,无论如何,这是我根据两种可能的解释得出的答案。无论哪种方式,您都不一定必须使用 JavaScript。
您正确地将列表数据作为对象的context
参数值传递TemplateResponse
(FastAPI 在后台使用 Starlette,请参阅此处的文档)。您现在只需要通过指定的键在模板中引用它,即my_list
.
https://jinja.palletsprojects.com/en/3.0.x/templates/
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% endblock %}
{% block page_content %}
<div>
{{ my_list }}
</div>
如果您只想显示某些项目,即过滤掉其中一些项目,您可以使用标准 Python 在视图方法中执行此操作,例如使用内置filter()
函数(→ 请参阅Python 文档)或在模板中使用 Jinja 过滤器。
如果您想使用Jinja2 过滤器来修改模板中传递的数据,您可以利用Jinjas 文档中描述的 Jinja 的许多内置过滤器之一,甚至可以将自己的过滤器函数实现为简单的 Python 函数,如Starlette和Jinja2 文档中关于创建自定义过滤器。
推荐阅读
- java - Maven Project(Cucumber+TestNG+Selenium-Java] Test Can't Run test on command line with mvn clean install
- java - 即使在使用全局静态数组之后,我的数组值也在 java 中发生了变化。如何克服它?
- jmeter - JMeter 无法打开测试计划 ConversionException
- javascript - jQuery - [错误]。在参数列表之后
- c# - 如何使用 SCOM SDK 将性能数据插入 DW 数据库?
- pdf - iText 将表附加到 PdfContentByte
- java - 将 keras 模型加载到 java 程序以预测新输入
- vba - 使用多个标准的 VBA 自动过滤器
- php - 如何在 Drupal 8 中的链接 uri 自动完成选择小部件中设置特定内容类型不可用的内容?
- ionic-framework - Dexie Js 无法在移动设备上运行