[PYTHON] Jinja2 템플릿 언어에 '여기'(현재 디렉토리)라는 개념이 있습니까?
PYTHONJinja2 템플릿 언어에 '여기'(현재 디렉토리)라는 개념이 있습니까?
Jinja2는 템플릿과 관련된 경로를 지원합니까? % (here) s / other / template.html, 파일 시스템에있는 현재 템플릿의 위치에 상대적인 다른 템플릿을 포함 하시겠습니까?
해결법
-
==============================
1.나는 그렇게 믿지 않는다. 일반적으로 사용중인 템플릿 로더 및 환경의 루트와 관련하여 경로를 지정하여 다른 템플릿을 포함하거나 확장합니다.
나는 그렇게 믿지 않는다. 일반적으로 사용중인 템플릿 로더 및 환경의 루트와 관련하여 경로를 지정하여 다른 템플릿을 포함하거나 확장합니다.
템플릿이 모두 / path / to / templates에 있고 Jinja를 다음과 같이 설정했다고 가정 해 봅시다.
import jinja2 template_dir = '/path/to/templates' loader = jinja2.FileSystemLoader(template_dir) environment = jinja2.Environment(loader=loader)
이제 /path/to/templates/includes/sidebar.html을 /path/to/templates/index.html 템플릿에 포함 시키려면 index.html에 다음을 작성하십시오.
{% include 'includes/sidebar.html' %}
Jinja는 그것을 찾는 방법을 알아낼 것입니다.
-
==============================
2.Will McCutchen의 답변에 덧붙이면,
Will McCutchen의 답변에 덧붙이면,
로더에 여러 디렉토리를 가질 수 있습니다. 그런 다음 템플릿을 찾을 때까지 각 디렉토리를 순서대로 검색합니다.
예를 들어 "/includes/sidebar.html"대신 "sidebar.html"을 사용하려면 다음을 사용하십시오.
loader=jinja2.FileSystemLoader( [os.path.join(os.path.dirname(__file__),"templates/includes"), os.path.join(os.path.dirname(__file__),"templates")])
대신에
loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),"templates"))
-
==============================
3.jinja2.Environment.join_path ()에 대한 문서에 따르면, "템플리트 경로 결합"을 구현하기 위해 join_path ()를 대체함으로써 상대적인 템플리트 경로에 대한 지원이 가능합니다.
jinja2.Environment.join_path ()에 대한 문서에 따르면, "템플리트 경로 결합"을 구현하기 위해 join_path ()를 대체함으로써 상대적인 템플리트 경로에 대한 지원이 가능합니다.
class RelEnvironment(jinja2.Environment): """Override join_path() to enable relative template paths.""" def join_path(self, template, parent): return os.path.join(os.path.dirname(parent), template)
-
==============================
4.이 제한을 극복하는 가장 깨끗한 방법은 상대적인 템플릿 이름을 가져올 수있는 jinja2 확장을 사용하는 것입니다.
이 제한을 극복하는 가장 깨끗한 방법은 상대적인 템플릿 이름을 가져올 수있는 jinja2 확장을 사용하는 것입니다.
다음 중 좋아하는 것 :
from jinja2.ext import Extension import re class RelativeInclude(Extension): """Allows to import relative template names""" tags = set(['include2']) def __init__(self, environment): super(RelativeInclude, self).__init__(environment) self.matcher = re.compile("\.*") def parse(self, parser): node = parser.parse_include() template = node.template.as_const() if template.startswith("."): # determine the number of go ups up = len(self.matcher.match(template).group()) # split the current template name into path elements # take elements minus the number of go ups seq = parser.name.split("/")[:-up] # extend elements with the relative path elements seq.extend(template.split("/")[1:]) template = "/".join(seq) node.template.value = template return node
-
==============================
5.Django 2.x는 상대적인 템플릿을 가져올 수 있습니다. :피
Django 2.x는 상대적인 템플릿을 가져올 수 있습니다. :피
from https://stackoverflow.com/questions/2180247/does-the-jinja2-templating-language-have-the-concept-of-here-current-director by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 임베디드 파이썬 중지 (0) | 2018.11.07 |
---|---|
[PYTHON] 파이썬에서 파일의 인코딩을 아는 법? [복제] (0) | 2018.11.07 |
[PYTHON] `import __main__`을 사용하는 것이 좋은 습관입니까? (0) | 2018.11.07 |
[PYTHON] Avro 스키마에 레코드를 중첩하는 방법은 무엇입니까? (0) | 2018.11.06 |
[PYTHON] 객체를위한 팩토리 메소드 - 모범 사례? (0) | 2018.11.06 |