콘텐츠로 이동

템플릿

Starlette는 특정 템플릿 엔진과 엄격하게 결합되지 않지만 Jinja2는 탁월한 선택입니다.

Jinja2 템플릿

서명: Jinja2Templates(directory, context_processors=None, **env_options)

  • directory 문자열, os. 경로 또는 문자열 또는 os 목록. 디렉토리 경로를 나타내는 경로 같은.
  • context_processors 템플릿 컨텍스트에 추가할 사전을 반환하는 함수 목록입니다.
  • **env_options - Jinja2 환경에 추가 키워드 인수가 전달되었습니다.

Starlette는 jinja2 구성을 수행하는 쉬운 방법을 제공합니다. 이것은 기본적으로 사용하려는 것일 수 있습니다.

Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
별자리에서. 라우팅 가져오기 경로, 마운트
스타렛에서.템플릿 가져오기 Jinja2Tem
Starlette.static에서 Static 가져오기


템플릿 = Jinja2Tem (디렉토리 = '템플릿')

Async def 홈페이지(요청):
    템플릿을 반환합니다. 템플릿 응답(요청, '인덱스.html')

경로 = [
    경로('/', 엔드포인트 = 홈페이지),
    마운트('/정적', 정적 파일(디렉토리 = '정적'), 이름 = '정적')
]

앱 = Starlette(디버그 = 참, 경로 = 경로)

들어오는 request 인스턴스는 템플릿 컨텍스트의 일부로 포함되어야 합니다.

Jinja2 템플릿 컨텍스트에는 url_for 기능이 자동으로 포함되므로 애플리케이션 내의 다른 페이지에 올바르게 하이퍼링크를 연결할 수 있습니다.

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

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

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

공통 표시에서 공통 표시 가져오기
스타렛에서.템플릿 가져오기 Jinja2Tem

데프 마크 _ 필터(텍스트):
    공통 표시 반환(텍스트)

템플릿 = Jinja2Tem (디렉토리 = '템플릿')
템플릿.env. ['표시'] =

사용자 지정 jinja2를 사용하십시오. 환경 인스턴스

Starlette는 사전 구성된 jinja2.Environment 인스턴스도 허용합니다.

진자2 가져오기
스타렛에서.템플릿 가져오기 Jinja2Tem

Env = jinja2. 환경 (. ..)
템플릿 = Jinja2Tem (env = env)

컨텍스트 처리기

컨텍스트 처리기는 템플릿 컨텍스트에 통합할 사전을 반환하는 함수입니다. 각 함수는 request 라는 하나의 인수만 사용하고 컨텍스트에 추가할 사전을 반환해야 합니다.

템플릿 핸들러의 일반적인 사용 사례는 공유 변수를 사용하여 템플릿 컨텍스트를 확장하는 것입니다.

타이핑 가져오기
스타렛에서. 요청 가져오기 요청

Def app_ (요청: 요청) -> 타이핑. Dict [str, 타이핑. 모두]:
    반품 {'app': request.app}

등록 컨텍스트 템플릿

컨텍스트 핸들러를 Jinja2Templates 클래스의 context_processors 매개 변수로 전달합니다.

타이핑 가져오기

스타렛에서. 요청 가져오기 요청
스타렛에서.템플릿 가져오기 Jinja2Tem

Def app_ (요청: 요청) -> 타이핑. Dict [str, 타이핑. 모두]:
    반품 {'app': request.app}

템플릿 = Jinja2Tem (
    디렉토리 = '템플릿', 컨텍스트 _ 프로세서 = [app_]
)

!!! 정보, 컨텍스트 핸들러로서의 비동기 기능은 지원되지 않습니다.

테스트 템플릿 응답

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

Starlette.testClient에서 TestClient 가져오기


Def test_():
    클라이언트 = TestClient (앱)
    응답 = client.get ("/")
    응답을 주장합니다. 상태 _ 코드 = = 200
    주장response.template.name== '인덱스.html'
    응답에서 "요청"을 주장합니다.

Jinja2 환경 사용자 정의

Jinja2Templates 는 Jinja2 Environment 에서 지원하는 모든 옵션을 허용합니다. 이렇게 하면 Starlette에서 만든 Environment 인스턴스를 더 많이 제어할 수 있습니다.

Environment 에 사용할 수 있는 옵션 목록을 보려면 여기에서 Jinja2 문서를 볼 수 있습니다.

스타렛에서.템플릿 가져오기 Jinja2Tem


템플릿 = Jinja2템플릿 (디렉토리 = '템플릿', 자동 탈출 = 거짓, 자동 재로드 = 참)

비동기 템플릿 렌더링

Jinja2는 비동기 템플릿 렌더링을 지원하지만 일반적으로 템플릿에 데이터베이스 조회 또는 기타 I/O 작업을 호출하기 위한 논리를 포함하지 않는 것이 좋습니다.

반대로 보기 내의 데이터베이스 쿼리를 엄격하게 평가하고 최종 결과를 컨텍스트에 포함하여 엔드포인트가 모든 I/O를 수행하는지 확인하는 것이 좋습니다.