FastAPI.3 Starlette, Template request test

BodeulMaNN·2022년 12월 9일
0

FastAPI

목록 보기
3/8

Starlette는 특정 템플릿 엔진과 연결되어 있지 않지만 Jinja2는 최고의 선택을 제공한다.

from starlette.applications import Starlette
from starlette.routing import Route, Mount
from starlette.templating import Jinja2Templates
from starlette.staticfiles import StaticFiles


templates = Jinja2Templates(directory='templates')

async def homepage(request):
    return templates.TemplateResponse('index.html', {'request': request})

routes = [
    Route('/', endpoint=homepage),
    Mount('/static', StaticFiles(directory='static'), name='static')
]

app = Starlette(debug=True, routes=routes)

돌아오는 request 인스턴스는 템플릿 컨텍스트의 일부로 포함되어야 한다.

Jinja2 템플렛 컨텍스트는 자동으로 url_for기능을 포함하므로 애플리케이션 내의 다른 페이지로 하이퍼링크 할 수 있다.

예를 들어 HTML템플릿 내에서 정적 파일에 연결할 수 있다.

<link href="{{ url_for('static', path='/css/bootstrap.min.css') }}" rel="stylesheet">

사용자 정의 필터를 사용하려면 env속성을 업데이트 해야한다. ; Jinja2Templates

from commonmark import commonmark
from starlette.templating import Jinja2Templates

def marked_filter(text):
    return commonmark(text)

templates = Jinja2Templates(directory='templates')
templates.env.filters['marked'] = marked_filter

템플릿 응답 테스트

테스트 클라이언트를 사용할 때 템플릿 응답에는 .template 및 .context 속성이 포함된다.

def test_homepage():
    client = TestClient(app)
    response = client.get("/")
    assert response.status_code == 200
    assert response.template.name == 'index.html'
    assert "request" in response.context

Jinja2 환경설정

from starlette.templating import Jinja2Templates


templates = Jinja2Templates(directory='templates', autoescape=False, auto_reload=True)
profile
반갑습니다

0개의 댓글