Python 使用fastapi和jinja2从html链接文件

Python 使用fastapi和jinja2从html链接文件,python,jinja2,fastapi,uvicorn,Python,Jinja2,Fastapi,Uvicorn,嗨,我正在尝试使用fastapi和jinja2从html代码链接到json文件,但链接不起作用。我想我必须告诉fastapi如何找到文件或类似的东西。。我得到了文件的json(api)应答 {"detail":"Not Found"} python代码: from fastapi import FastAPI, Form, Request from fastapi.responses import HTMLResponse from fastapi.te

嗨,我正在尝试使用fastapi和jinja2从html代码链接到json文件,但链接不起作用。我想我必须告诉fastapi如何找到文件或类似的东西。。我得到了文件的json(api)应答

{"detail":"Not Found"}
python代码:

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

app = FastAPI()

templates = Jinja2Templates(directory='templates')


@app.get('/data', response_class=HTMLResponse)
async def data(request: Request):
    return templates.TemplateResponse('data.html', {
        'request': request
    })
以及HTML:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
        <script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
        <title>Data</title>
    </head>
    <body>
        <div class="ui container">
            <h1>
                Data downloader:
            </h1>
            <a href="../json/data.json" target="_blank">
                Data
            </a>
        </div>

    </body>
</html>

资料
数据下载程序:
这段代码成功了

python:

from fastapi import FastAPI, Form, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/json", StaticFiles(directory="json"), name="json")

templates = Jinja2Templates(directory='templates')


@app.get('/data', response_class=HTMLResponse)
async def data(request: Request):
    return templates.TemplateResponse('data.html', {
        'request': request
    })
HTML:


资料
数据下载程序:

因此,正是导入和使用了
静态文件
,第一个代码力

我敢打赌
href
是错误的。如果它是路由的路径,则不需要
,如果
data.json
文件位于同一路径中,也不需要该路径folder@lsabi不路径正确,在新选项卡中打开的url是data.json所在的路径。。如果我不使用fastapi和uvicorn直接运行html,lik就会工作。。。所以它一定是在fastapi模块中,我遗漏了一些东西。请尝试共享您的文件夹结构。Fastapi可能仅将某个文件夹作为静态文件夹提供服务,其余文件夹通过内部路由器传递
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
        <script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
        <title>Data</title>
    </head>
    <body>
        <div class="ui container">
            <h1>
                Data downloader:
            </h1>
            <a href="{{ url_for('json', path='/data.json') }}" target="_blank">
                Data
            </a>
        </div>

    </body>
</html>