Django のテンプレートでコンテキスト変数を「シャドウ」する方法を探しています。
テンプレートの 1 つに次の構造を持たせてみましょう。
{% block content %}
{# set context variables with a custom tag #}
{% paginator_ctx products %} {# sets `paginator' in context dict #}
{% for product in paginator.object_list %}
{# Render elements from _outer_ loop #}
{% paginator_ctx child_products %} {# !! replaces context !! #}
{% for cat in paginator.object_list %}
{# Render elements from _inner_ loop #}
{% endfor %}
{% include "paginator.html" %}
{% endfor %}
{# ?? how to restore the original context ?? #}
{% include "paginator.html" %} {# renders prev, next & current page number #}
{% endblock %}
この例から、何を達成する必要があるかが明らかであることを願っています。Python での動作と同様に、テンプレートにローカル スコープを設定します。それとも私は間違った側からそれを取っていますか? 引数に値を渡す代わりに、コンテキスト変数に依存する汎用テンプレートを作成するには?
ありがとう。
更新: コンテキスト変数を手動で保存するための少しハックなソリューションがあります。
{# outer block #}
{% with context_var as context_var_saved %}
{# inner/nested block overwriting context_var #}
{% with context_var_saved as context_var %}
{# process restored context_var #}
{% endwith %}
{# end of inner block #}
{% endwith %}
{# end of outer block #}
よりクリーンなソリューションがありませんか? より多くの変数またはコンテキスト全体を保存する必要がある場合はどうすればよいですか?