2012-06-22 2 views
9

나는 return render_template('index.html', users=users)을 사용한다고합니다. 보기 내부에서 파일을 명시 적으로 보내지 않고도 파일 이름을 템플릿 내부에서 가져올 수 있습니까?Jinja2 템플릿에서 현재 템플릿의 파일 이름을 얻는 방법은 무엇입니까?

+0

궁금한 점이 있습니다. 무엇을하려하십니까? (답변에 흥미가 있음) –

+0

두 번째 @JeffTratner. 뭐하고 싶어? – Apalala

+0

파일 이름에 따라 본문에 클래스를 추가하고 싶습니다. 예를 들어 "user-details.html"템플릿 인 경우 javascript를 통해 적절하게 관리하려면 클래스를 추가하고 싶습니다. –

답변

5

기본 이름 만 있으면 {{ self }}을 사용하면 템플릿의 기본 이름이 포함 된 repr 문자열 (예 : <TemplateReference 'view.html'>)을 반환 할 수 있습니다. 전체 경로를해야 할 경우, 예를 들어, {{ self | quoted }}

@app.template_filter('quoted') 
def quoted(s): 
    l = re.findall('\'([^\']*)\'', str(s)) 
    if l: 
     return l[0] 
    return None 

, 필터, 예를 들어, 이것을 분석 할 수있다, 당신은 템플릿을 서브 클래 싱 할 수 있습니다 '/full/path/to/view.html'.

+0

작동하지 않습니다. 귀하의 솔루션을 시도하면이 오류가 발생합니다 : TemplateAssertionError : 'quoted'라는 필터가 없습니다. – renatov

+0

@renatov : @ app.template_filter ('quoted')는 어디에 있습니까? Flask 앱에 필터가 제대로 등록되어 있습니까? – PartialOrder

5

문서화되지는 않았지만 {{ self._TemplateReference__context.name }}은 템플릿 이름을 제공합니다. self._TemplateReference__context 이후에 사용할 수있는 여러 interresting 속성이 있습니다.

당신은, 예를 들어, 맨 위의 기본 템플릿이를 추가 할 수

 <meta name="template" content="{{ self._TemplateReference__context.name }}"> 

그래서 페이지 소스에서 찾고있는 것은 빨리 당신을 도와 관련 템플릿 파일을 찾을 것입니다. 이런 종류의 정보를 공개하고 싶지 않으면 테스트 환경을 조건으로합니다.

관련 문제