传奇继续,从原始线程延伸.
所以,我有一些东西在python代码中制作宏:
from flask import get_template_attribute
from jinja2 import Template
class InternalMacro(object):
"""
Creates a macro given a name, internal macro text, and content to fill(as namedtuple(t.var), dict(k,v), list(i), or other)
"""
def __init__(self, name = None,
text = None,
content_is = None):
self.name = name
self.macro_name = "{}_template".format(self.name)
self.macro_var = "{}_macro".format(self.name)
self.text = text
self.content_is = content_is
self.macro_txt = self.format_text
@property
def is_tuple(self):
return "{{% macro {0}(t) %}}{1}{{% endmacro %}}".format(self.macro_var, self.text)
@property
def is_dict(self):
return "{{% macro …Run Code Online (Sandbox Code Playgroud) 我正在尝试做这样的事情:
{% macro obj_type_1 %}
stuff
{% endmacro %}
{% macro obj_type_2 %}
stuff
{% endmacro %}
{{ (obj|get_type)(obj) }}
Run Code Online (Sandbox Code Playgroud)
在此示例中,get_type是一个将返回的过滤器obj_type_1或obj_type_2- 即要调用的宏的名称obj.我不想标记obj配置输出,因为现在obj在几个模板中用作结构数据,根据上下文使用不同的标记进行渲染.
我知道这里的语法有点折磨,但我认为这是因为我想要做的事情在Jinja模板中不可能立即实现.我试图用模板替换一些if/elif/else废话的一些配置生成代码,但这一点似乎是一个棘手的问题.