我想为模板本身的Jinja模板中使用的变量设置默认值。看着Jinja2文档,我没有看到任何方式来做到这一点。我错过了什么吗?我看到了“默认”过滤器,但我想将值模板设置为宽而不是逐个使用的基础。从jinja模板中定义默认变量值的方法?
我花了一个小时左右的努力够教自己有关的Jinja2扩展写作过程编写扩展标记setdefault
,这可能是这样的:
{% setdefault animal = 'wumpas' %}
的预期效果是等同于set
标记分配的名称是未定义的,但是如果定义了分配的名称则不起作用。我迄今未能得到这个工作。
我的工作是完全规避jinja并制作复合文件;特殊标记之前的区域是默认值的(yaml)映射,而标记之后的区域是jinja模板。这似乎是做工精细的理念落实本的证据是:
skel_text = """\
animal: wumpas
%%
The car carried my {{animal}} to the vet.
"""
class Error(Exception): pass
_skel_rx = re.compile(
r"""((?P<defaults>.*?)^%%[ \t]*\n)?(?P<template>.*)""",
re.MULTILINE|re.DOTALL)
_env = jinja2.Environment(trim_blocks=True)
def render(skel, **context):
m = _skel_rx.match(skel_text)
if not m:
raise Error('skel split failed')
defaults = yaml.load(m.group('defaults') or '{}')
template = _env.from_string(m.group('template') or '')
template.globals.update(defaults)
return template.render(**context)
print render(skel_text)
print render(skel_text, animal='cat')
那么,有没有办法做到在Jinja2的股票相当于或如何可能一个写一个扩展来实现预期的效果?
这是不完全是我所希望的,但我承认这样做并没有发生在我身上。听起来不错。 – 2010-12-19 15:51:56