모든 시스템 전자 메일의 템플릿을 DB에 저장하기로 결정했습니다. 이 전자 메일의 본문은 정상적인 장고 템플릿 (태그 포함)입니다.파일 대신 문자열에서 템플릿로드
즉, 문자열이 아닌 파일에서 템플릿을로드하려면 템플릿 엔진이 필요합니다. 이것을 수행 할 수있는 방법이 있습니까?
모든 시스템 전자 메일의 템플릿을 DB에 저장하기로 결정했습니다. 이 전자 메일의 본문은 정상적인 장고 템플릿 (태그 포함)입니다.파일 대신 문자열에서 템플릿로드
즉, 문자열이 아닌 파일에서 템플릿을로드하려면 템플릿 엔진이 필요합니다. 이것을 수행 할 수있는 방법이 있습니까?
django.template.Template()
을 인스턴스화하고 문자열을 템플릿으로 전달합니다.
이것은'settings.TEMPLATES [ 'BACKEND']'에 구성된 백엔드를 사용하지 않지만 항상 장고의 템플릿 시스템을 사용합니다. 구성된 백엔드가있는 문자열에서 템플릿을 만드는 방법이 있습니까? – Feuermurmel
설정에서 백엔드를 가져오고 사용할 Template()를 찾아 (지도 또는 인트로 스펙트가 있음) 찾아 인스턴스를 만듭니다. – kaleissin
이그나시오 바스케스 - 아브람에서 답을 보완하기 위해, 여기에 내가 문자열에서 템플릿 객체를 얻기 위해 사용하는 코드는 다음과 같습니다
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_string
와 django.template.Template
객체의 인스턴스를 그 첫 번째 인수는 오류가 발생하지 않는 settings.TEMPLATES
의 첫 번째 백엔드를 사용합니다.
이걸 몇 년 후 발견하고 다시 upvote 할 수 있기를 바랍니다. – dbn