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)