我正在通过 jingo 使用 jinja2 开发 Django 应用程序。我定义了一个宏templates/macros.html
,我需要从定义的过滤器中调用它,helpers.py
因为我必须传递它的参数中涉及某种 python 逻辑。有什么办法吗?
我想要实现的是这样的:
在templates/macros.html
:
{% macro render_link(obj) -}
<a href="{{ obj.get_absolute_url() }}">{{ obj }}</a>
-%}
在helpers.py
:
@register.filter
def as_link(obj_or_list):
if hasattr(obj_or_list, '__iter__'):
for obj in obj_or_list:
# call `render_link(obj)` here and concat results somehow
else:
# call `render_link(obj_or_list)` here
每当我需要它时,在我的模板中:
{{ an_object|as_link }}
我需要在这里使用过滤器,因为我需要在将参数传递给宏之前对参数进行一些处理。我知道我可以在宏本身中编写逻辑,但是我需要在 jinja2 环境中添加一些方法(例如hasattr
在示例中),当涉及的逻辑太复杂时,这是不可行的。