파일 시스템에서 jinja 템플릿을 직접 로드하는 방법
pocoo.org 에 있는 jinja API 문서에는 다음과 같은 내용이 있습니다.
응용프로그램에 대한 템플릿을 로드하도록 Jinja2를 구성하는 가장 간단한 방법은 대략 다음과 같습니다.
from jinja2 import Environment, PackageLoader env = Environment(loader=PackageLoader('yourapplication', templates'))
이렇게 하면 기본 설정을 사용하는 템플릿 환경이 생성되고 애플리케이션 python 패키지 내의 템플릿 폴더에서 템플릿을 검색하는 로더가 생성됩니다.
알고 보니 템플릿이 포함된 파이썬 패키지를 만들고 설치해야 하기 때문에 이 방법은 그리 간단하지 않습니다. 이는 특히 코드를 배포할 의도가 없는 경우 불필요한 복잡성을 야기합니다.
저는 그렇게 하는 것에 대해 다음과 같은 관련된 질문들을 발견했지만, 그 대답은 모호하고 만족스럽지 못합니다.
패키지의 리소스가 아닌 파일 시스템에서 직접 템플릿을 로드하려면 어떻게 해야 합니까?
사용FileSystemLoader
대신에PackageLoader
템플릿과 동일한 디렉토리에 python 파일이 있다고 가정합니다.
./index.py
./template.html
이 index.py 에서 템플릿을 찾아 렌더링합니다.
#!/usr/bin/python
import jinja2
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = "template.html"
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render() # this is where to put args to the template renderer
print(outputText)
서론에서,PackageLoader
접근 방식은 기본적인 "임의" 방법으로 제시되는 것으로 보이지만, 모든 기본 로더를 설명하는 섹션도 있습니다.
더 간단한 방법은 생성자를 직접 호출하여 사용하는 것입니다.open
파일 로드:
from jinja2 import Template
with open('template.html.jinja2') as file_:
template = Template(file_.read())
template.render(name='John')
다음은 하나의 라이너입니다.
from jinja2 import Template
with open('template_file.j2') as f:
template = Template(f.read())
그런 다음 템플릿을 다른 줄에 렌더링하거나 한 줄에 모두 렌더링할 수 있습니다.
with open('template_file.j2') as f:
rendered = Template(f.read()).render(var="TEXT")
Python 3.4+와 Jinja2 - v2.11+를 사용하면 Python의 pathlib과 Filesystem을 결합하여 흐름을 단순화할 수 있습니다.
from pathlib import Path
...
p = Path(__file__).parent.parent / 'templates' # sample relative path
env = Environment(
loader=FileSystemLoader(Path(p)))
template = env.get_template('your_file.jinja2')
직접 사용하는 것이 불편합니다.Template(file)
진자의 템플릿 상속 처리가 잘 작동하지 않을 수 있기 때문입니다.
최신 버전의 Jinja - v2.11+에서만 Pathlib 지원이 추가되었습니다.
from jinja2 import Environment, select_autoescape, FileSystemLoader
env = Environment(loader=FileSystemLoader(
searchpath=folder_contain_list_html), autoescape=select_autoescape(['html', 'xml']))
template = env.get_template('file_name_detail_template')
body_html = template.render(**args)
send_email(body_html)
언급URL : https://stackoverflow.com/questions/38642557/how-to-load-jinja-template-directly-from-filesystem
'programing' 카테고리의 다른 글
호스트에서 mongo 도커 컨테이너에 연결하는 중 (0) | 2023.06.19 |
---|---|
클래스 경로가 있는 스프링 부트 실행 파일 병 (0) | 2023.06.19 |
해시 인덱스와 오름차순 인덱스 간의 Mongodb 성능 차이(순서가 없는 필드에서 해시를 사용하지 않는 이유) (0) | 2023.06.19 |
git 명령을 사용하여 폴더를 다른 폴더로 이동 (0) | 2023.06.19 |
노드를 사용하여 MariaDB에 데이터를 삽입하는 데 문제가 발생했습니다.제이에스 (0) | 2023.06.19 |