在Flask app中创建第二个Jinja环境

时间:2016-05-23 13:19:36

标签: python flask jinja2

我想创建第二个Jinja环境来生成LaTeX文档。 This snippet使用Flask.create_jinja_environment,但我想使用自定义加载器:FileSystemLoader('/path/to/latex/templates')。如何创建类似代码段的env,但使用我的自定义加载程序?

LATEX_SUBS = (
    (re.compile(r'\\'), r'\\textbackslash'),
    (re.compile(r'([{}_#%&$])'), r'\\\1'),
    (re.compile(r'~'), r'\~{}'),
    (re.compile(r'\^'), r'\^{}'),
    (re.compile(r'"'), r"''"),
    (re.compile(r'\.\.\.+'), r'\\ldots'),
)

def escape_tex(value):
    newval = value
    for pattern, replacement in LATEX_SUBS:
        newval = pattern.sub(replacement, newval)
    return newval

texenv = app.create_jinja_environment()
texenv.block_start_string = '((*'
texenv.block_end_string = '*))'
texenv.variable_start_string = '((('
texenv.variable_end_string = ')))'
texenv.comment_start_string = '((='
texenv.comment_end_string = '=))'
texenv.filters['escape_tex'] = escape_tex

1 个答案:

答案 0 :(得分:0)

该代码段使用create_jinja_environment,以便从应用模板所在的位置加载模板。这很可能是您想要的,只需使用LaTeX模板在应用程序的模板文件夹中创建一个目录。

你仍然可以使用create_jinja_environment,只需更换加载器,就像代码片段替换env上的其他属性一样。

texenv = app.create_jinja_environment()
texenv.loader = FileSystemLoader('/path/to/latex/templates')