「このテンプレートタグは、他の多くのテンプレートによって拡張された基本テンプレートで呼び出されます」とあなたは言いました。
問題は、このタグが名前付きブロック内から呼び出されているかどうかです。そうであれば、潜在的な問題がいくつかあります。
{% block %}
コンテキスト スタックに新しい dict をプッシュし、一致する `{% endblock %}' に到達するとポップします。これは、ブロック内で作成されたコンテキスト値が、基本的にブロックの終了時に範囲外になったことを意味します。
このブロックがベース テンプレートを拡張する他のテンプレートによってオーバーライドされた場合、 を実行しない限り、値がまったく利用できない可能性があります{{block.super}}
。
タグがa 内から呼び出されない{% block %}
場合、コンテキスト値は、それに続くすべてのコード (基本テンプレート、含まれるテンプレート、および (私が思うに) 拡張テンプレートのいずれか) で使用できる必要があります。
これは、一連の慎重なテストを作成することで、おそらく時間と労力を節約できるケースの 1 つです。
または、常にこの値にアクセスしている場合は、コンテキスト プロセッサに配置して、その可用性が保証されるようにすることもできます。
コメントの更新: OK、大砲を持ち込む時が来ました! Django テンプレートの最もいらいらする長年のバグの 1 つは、トップレベルのコンテキスト値である呼び出し可能オブジェクト (つまり、関数) (コンテキスト値の辞書値/メソッドである関数とは対照的に)が呼び出されないことです! このチケットは 2 年以上前のもので、修正には約 10 行のコードが必要です。テンプレート キャッシュの有効期限が切れた場合にのみ発生させたい重い DB 呼び出しがいくつかあります。そのため、a) テンプレート コードに MonkeyPatch を適用して呼び出し可能な問題を修正し、次に b) 必要に応じ_resolve_lookup()
て必要なパラメーターをすべて持つように関数をカレー化しました。これは、テンプレート「言語」の関数にパラメーターを渡すことができないためです。