如何使用 url_for() 将数据传递到另一个路由? fastapi 和 jinja2

发布时间:2021-03-05 16:15

我想从 jinja2 模板调用一个 fastapi 路由并将数据传递给被调用的路由。我所有的尝试都失败了。 我在 jinja2 模板中尝试了一些东西,比如 {{ url_for('function1', uustr=data.uustr, interval=1) }}

这是我要调用的 fastapi 路由(出于演示目的简化了语法):

@app.get("/updates/data/{uustr}",response_class=HTMLResponse)
async def function1(request: Request, uustr:str, interval:int):

  return"""
<html>
    <head>
        <title>{{ uustr }}</title>
    </head>
    <body>
        <h1>{{ interval }}</h1>
    </body>
</html>
"""

我收到此错误:

    raise ValueError('context must include a "request" key') 
ValueError: context must include a "request" key

有人有想法吗?

回答1

我找到了一个非常简单的解决方案,无需使用 url_for()

如果来自烧瓶世界的人有类似的问题,我的解决方案是: 我在 jinja2 模板中创建了一个简单的 HTML 按钮:

<button onclick="myFunction()">pass data to route</button>

并且我创建了一个非常简单的 javascript 函数来将数据传递给路由:

<script>
function myFunction() {
  window.location.href = "/updates/data/{{data.uustr}}?interval=2";
}
</script>

就是这样。