문제

나는 Mako 템플릿과 함께 Pylons를 사용하고 있으며 항상 입력을 피하고 싶습니다.

${ h.some_function_that_outputs_html() | n }

어떻게 든 함수를 표시하거나 변수를 안전하게 (Django에서 할 수 있음) 항상 파이프를 할 필요가 없습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

방금 당신이 a HTML 메소드 수업에서 Mako는 그 메소드를 호출하고 템플릿에서 반환하는 모든 것을 출력합니다.

그래서 나는했다 :

def __html__(self):
    return unicode(self)

그것이 기본적으로 H.literal이하는 일입니다.

다른 팁

에 따르면 필터링에 대한 마코 문서, 새를 만들 때 템플릿 내부에 적용되는 기본 필터를 설정할 수 있습니다. Template 뿐만 아니라 TemplateLookup (이 경우 찾는 모든 템플릿에 대해 기본적으로 적용됩니다), default_filters 논쟁.

Pylons는이 주장을 사용합니다 TemplateLookup 내부 프로젝트의 기본값을 설정합니다 config/environment.py 파일:

# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
    directories=paths['templates'],
    error_handler=handle_mako_error,
    module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
    input_encoding='utf-8', default_filters=['escape'],
    imports=['from webhelpers.html import escape'])

그렇기 때문에 기본적으로 탈출을받는 이유입니다 (Mako를 직접 사용할 때는 그렇지 않습니다). 따라서 구성 파일에서 전역으로 변경하거나 표준 조회에 의존 할 수 없습니다. 물론 필터를 명시 적으로 사용하여 탈출이 필요한 것들을 피해야합니다.

Pylons 도우미와 함께 "안전한 것으로 표시된"문자열을 전달할 수도 있습니다. h.literal, 예를 들어 통과하는 경우 h.literal('This will <b>not</b> be escaped') 템플릿에 이름이 지정된 변수라고 말하십시오 spam, 당신은 그냥 사용할 수 있습니다 ${spam} 탈출하지 않고.

템플릿 내부에서 특정 함수를 호출 할 때 동일한 효과를 원한다면이 기능은 문자 그대로 반환하거나 호출하는 기능에 대한 도우미를 제공해야합니다. h.literal 결과적으로 원래 함수를 내버려두고 싶다면. (또는 "필터링 DEF"(위와 같은 Mako Doc 참조)를 통해 호출 할 수 있다고 생각합니다. 아직 실험하지 않았습니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top