jingoを通じてjinja2を使用してDjangoアプリを開発しています。で定義されたマクロがあり、でtemplates/macros.html
定義されたフィルターから呼び出す必要がありhelpers.py
ます。これは、渡す必要があるパラメーターにある種の python-logic が含まれているためです。そうする方法はありますか?
私が達成したいのはこのようなものです:
で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
例のように) に追加する必要があり、関連するロジックが複雑すぎる場合、これは実行できません。