1

jinja2 テンプレートの 1 つで繰り返し使用しているコードがいくつかあります。文字列をリンクに変換しているときに、末尾に / があるかどうかを確認し、ある場合は切り捨てます。これは私がそれをどのように見せたいかです。

{% macro remove_trailing_slash(path) %}
  {% if path[-1:] == '/' %}
    {{ path[:-1] }}
  {% else %}
    {{ path }}
  {% endif %}
{% endmacro %}

私が抱えている問題は、変更されたパスを元の呼び出し元に戻す方法を考え出すことです。jinja2 ドキュメントで return ステートメントが見つからないようです。

4

1 に答える 1

3

これはfiltermacro.

私の理解では、マクロはロジックの一部を再利用するためのものであり、実際には Python の関数にマップされません (マクロが呼び出されるすべての場所にマクロの内容をコピーするのは、Jinja コンパイラの権利の範囲内です)。一方、フィルタは、「出力ストリーム」に渡される前にテンプレートのデータを操作するように設計されています。

を Jinja 環境に登録するfilterと、次のようなことができます。

{{ one_url | remove_trailing_slash }}
{{ another_url | remove_trailing_slash }}

テンプレート全体でこれを行っている場合は、これらの値をテンプレートに渡す前にサニタイズしたほうがよい場合があります。

このパターンをラップするマクロを作成することもできます。

{% macro link(url) %}
<a href="{{ url }}">{{ url | remove_trailing_slash }}</a>
{% endmacro %}
于 2013-08-27T05:15:02.240 に答える