FastAPI template response sorunu

FastAPI’da main içerisinde template response dönebilirken routers klasöründen template response dönemiyorum. acaba yaklaşımım mı yanlış?

.
└── app/
    ├── routers/
    │   ├── price_search.py
    │   ├── admin.py
    │   ├── booking.py
    │   └── autocomplete.py
    ├── main.py
    ├── database.py
    └── models.py

main.py

from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

from routers import admin, autocomplete, price_search, booking
import models
from database import engine

models.Base.metadata.create_all(bind=engine)

app = FastAPI(
    title="Flight Widget",
    description="Flight Widget API docs by SAN"
)

origins = ["*"]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
templates = Jinja2Templates(directory="./ui")
app.mount("/ui", StaticFiles(directory="ui"), name="ui")
app.include_router(autocomplete.router)
app.include_router(admin.router)
app.include_router(price_search.router)
app.include_router(booking.router)


@app.get("/")
def entry(request: Request):
    return templates.TemplateResponse("index.html", context={"request": request, "data": "data"})

price_search.py

from fastapi import APIRouter, Depends, Request
from main import templates
import requests

from conf import (
    DEFAULT_PRICE_SEARCH_PARAMETERS,
    FLIGHT_SEARCH_SERVICE_URI,
    URL,
)
import deps

router = APIRouter(tags=["Price Search"])


@router.get("/pricesearch")
def price_search(
    request: Request,
    model: deps.PriceSearchParams = Depends(),
    token=Depends(deps.check_token),
):
    data_dict = model.get_as_dict()
    data_dict.update(DEFAULT_PRICE_SEARCH_PARAMETERS)
    print(data_dict)
    headers = {"Authorization": f"Bearer {token}"}
    url = URL + FLIGHT_SEARCH_SERVICE_URI
    r = requests.post(url, json=data_dict, headers=headers)
    return templates.TemplateResponse("price_search.html", context={"request": request, "data": r.json()})

bu routerda mainden templates’i import edemiyor. verdiği hata şu şekilde

ERROR:    Error loading ASGI app. Could not import module "main".

from main import templates
şeklinde çalışmıyormuş. sebebini bilmiyorum.
import main
şeklinde kullanıp aşağıda
return main.templates.TemplateResponse("price_search.html", context={"request": request, "data": r.json()})
şeklinde kullanınca çalıştı

Su herhalde:

from x import y kullanmamamin, ve bazen global’leri g_templates seklinde adlandirmamin sebebi.

1 Beğeni