2010-01-30 2 views
25

모든 시스템 전자 메일의 템플릿을 DB에 저장하기로 결정했습니다. 이 전자 메일의 본문은 정상적인 장고 템플릿 (태그 포함)입니다.파일 대신 문자열에서 템플릿로드

즉, 문자열이 아닌 파일에서 템플릿을로드하려면 템플릿 엔진이 필요합니다. 이것을 수행 할 수있는 방법이 있습니까?

+0

이걸 몇 년 후 발견하고 다시 upvote 할 수 있기를 바랍니다. – dbn

답변

26

django.template.Template()을 인스턴스화하고 문자열을 템플릿으로 전달합니다.

+2

이것은'settings.TEMPLATES [ 'BACKEND']'에 구성된 백엔드를 사용하지 않지만 항상 장고의 템플릿 시스템을 사용합니다. 구성된 백엔드가있는 문자열에서 템플릿을 만드는 방법이 있습니까? – Feuermurmel

+0

설정에서 백엔드를 가져오고 사용할 Template()를 찾아 (지도 또는 인트로 스펙트가 있음) 찾아 인스턴스를 만듭니다. – kaleissin

2

이그나시오 바스케스 - 아브람에서 답을 보완하기 위해, 여기에 내가 문자열에서 템플릿 객체를 얻기 위해 사용하는 코드는 다음과 같습니다

from django.template import engines, TemplateSyntaxError 

def template_from_string(template_string, using=None): 
    """ 
    Convert a string into a template object, 
    using a given template engine or using the default backends 
    from settings.TEMPLATES if no engine was specified. 
    """ 
    # This function is based on django.template.loader.get_template, 
    # but uses Engine.from_string instead of Engine.get_template. 
    chain = [] 
    engine_list = engines.all() if using is None else [engines[using]] 
    for engine in engine_list: 
     try: 
      return engine.from_string(template_string) 
     except TemplateSyntaxError as e: 
      chain.append(e) 
    raise TemplateSyntaxError(template_string, chain=chain) 

engine.from_string 방법은 template_stringdjango.template.Template 객체의 인스턴스를 그 첫 번째 인수는 오류가 발생하지 않는 settings.TEMPLATES의 첫 번째 백엔드를 사용합니다.

관련 문제