【问题标题】:Link files from html using fastapi and jinja2使用 fastapi 和 jinja2 从 html 链接文件
【发布时间】:2021-01-28 10:33:40
【问题描述】:

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

{"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>

【问题讨论】:

  • 我敢打赌href 是错误的。如果是路由的路径,则不需要..,如果data.json文件在同一个文件夹中,则相同
  • @lsabi 否...路径正确,在新选项卡中打开的url是data.json所在的路径。如果我直接运行html而不使用fastapi和uvicorn喜欢的作品......所以它必须在我错过了一些东西的fastapi模块中......
  • 尝试共享您的文件夹结构。 Fastapi 可能仅将某个文件夹作为静态文件夹提供服务,其余文件夹通过内部路由器传递

标签: python jinja2 fastapi uvicorn


【解决方案1】:

这段代码做到了..

蟒蛇:

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:

<!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>

所以它是StaticFiles的导入和使用第一个代码dint有

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2022-10-13
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多