은 내가 Jinja2 템플릿과 같이 돌아 가면 : return render_response('home.htm', **context)
Jinja 2 템플릿에서 현재 변수 목록을 얻는 방법은 무엇입니까?
방법은 다음 템플릿 내에서 컨텍스트에서 변수의 목록을받을 수 있나요?
은 내가 Jinja2 템플릿과 같이 돌아 가면 : return render_response('home.htm', **context)
Jinja 2 템플릿에서 현재 변수 목록을 얻는 방법은 무엇입니까?
방법은 다음 템플릿 내에서 컨텍스트에서 변수의 목록을받을 수 있나요?
기술적으로 컨텍스트가 명명 된 사전으로 전달되지 않기 때문에 템플릿 내부에서 컨텍스트 변수 목록을 생성하려면 약간의 작업이 필요합니다. 그래도 가능합니다.
본질적으로 전역 변수의 사전이다 jinja2.Context 객체/함수
글로벌 네임 스페이스의 그 함수를 사용할 수 있도록 반환하는 Jinja context function 정의; 즉 jinja2.Environment 또는 jinja2.Template 전역 사전
선택적으로 컨텍스트의 개체를 필터링합니다. 예를 들어 callable()
을 사용하면 Jinja의 기본 전역 도우미 함수 (범위, 결합 자 등)를 건너 뛸 수 있습니다. 컨텍스트 함수 나 템플릿에서이 작업을 수행 할 수 있습니다. 어디서나 가장 합리적입니다.
예 :
>>> import jinja2
>>>
>>> @jinja2.contextfunction
... def get_context(c):
... return c
...
>>> tmpl = """
... {% for key, value in context().items() %}
... {% if not callable(value) %}
... {{ key }}:{{ value }}
... {% endif %}
... {% endfor %}
... """
>>>
>>> template = jinja2.Template(tmpl)
>>> template.globals['context'] = get_context
>>> template.globals['callable'] = callable
>>>
>>> context = {'a': 1, 'b': 2, 'c': 3}
>>>
>>> print(template.render(**context))
a:1
c:3
b:2
[또는, 다른 솔루션 작동하도록 ('home.htm', context=context)
와 render_response
를 호출합니다. 여기서
감사합니다. 나는 당신의 우수한 Jinja2 지식에 굴복한다. – Christian
'callable' 체크 때문에 솔루션은 명시 적으로 컨텍스트의 일부로 전달 된 함수를 무시합니다. 아마도 자주 발생하지는 않지만 차이를 만들 수 있습니다. –
참. 이 간단한 솔루션을 확실히 향상시킬 수 있습니다. 예를 들어,''template''이 전역 변수 인 경우,''get_context()''는''context''에 기초한''template.globals''에 존재하는 키가없는 새로운 사전을 반환 할 수 있습니다. – Garrett
을 어떻게 플라스크 응용 프로그램에서 작업 @crewbum's answer를 얻을 수있다 :
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
어디 넣을까요? – johnny
앱 초기화 (또는 앱 공장). flask-sqlalchemy, flask-login 등과 같은 플라스크 확장을 사용하는 경우, 이는 작성된 위치와 같은 위치에있을 수 있습니다. –
어때요? 템플릿 소스? 그게 뭐가 잘못 됐니? –