我决定在数据库中保存所有系统电子邮件的模板。 这些电子邮件的正文是普通的django模板(带标签)。
这意味着我需要模板引擎从字符串而不是从文件加载模板。有没有办法实现这个目标?
答案 0 :(得分:32)
实例化django.template.Template()
,传递字符串以用作模板。
答案 1 :(得分:5)
为了补充Ignacio Vazquez-Abrams的the answer,这里是我用来从字符串中获取模板对象的代码片段:
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
方法将使用django.template.Template
作为其第一个参数实例化template_string
对象,使用settings.TEMPLATES
的第一个后端,但不会导致错误。
答案 2 :(得分:5)
在Django 3上使用django Template和Context对我有用。
>>> df_1
Item_1 Item_1
i_1 i_2
i_1 i_3
i_1 i_4
i_5 i_6
i_5 i_7
>>> df_2
ID Item Valid_From Valid_To
1 i_1 2007-01-01 2030-01-01 <-- Overlap
1 i_2 2007-01-01 2030-01-01 <-- Overlap
1 i_5 2007-01-01 2013-12-31 <-- No Overlap
1 i_6 2014-01-01 2030-01-01 <-- No Overlap
2 i_1 2007-01-01 2011-12-31 <-- No Overlap
2 i_4 2012-01-01 2030-01-01 <-- No Overlap
2 i_10 2012-01-01 2018-12-31 <-- Not in df_1 => Not relevant
2 i_11 2012-01-01 2018-12-31 <-- Not in df_1 => Not relevant
2 i_7 2012-01-01 2018-12-31 <-- In df_1, but no match