Djangoカスタムテンプレートタグとテンプレートローダー
-
05-07-2019 - |
質問
[この議論は
は「django.template.loaders.app_directories.load_template_source」です カスタムテンプレートタグのTEMPLATE_LOADERS設定で必要 作業?
Djangoアプリケーションのtemplatetagsディレクトリにカスタムタグを置くだけで、そのタグをアプリケーションで使用できるようになります。
テンプレートの読み込みの場合、TEMPLATE_LOADERS設定に「django.template.loaders.filesystem.load_template_source」を設定すると、TEMPLATE_DIRSの適切なエントリが一緒に、Djangoからテンプレートを読み込むことができることがわかります指定されたディレクトリ。これは非常に明確で論理的です。しかし、カスタムテンプレートタグの場合、魔法のように利用できるようになります。
では、カスタムテンプレートタグがどのように検出/ロード/処理されるかご存知ですか?
解決
いいえ、 django.template.loaders.app_directories.load_template_source
は、カスタムテンプレートタグが機能するためにまったく必要ありません。
djangoに templatetags ライブラリをロードする場所を指示するためにディレクトリを指定する必要はありません(テンプレートの場合のように)、coz djangoは< code> INSTALLED_APPS リスト。
INSTALLED_APPS
のアプリケーションリストをループし、「 templatetags 」ディレクトリからすべてのライブラリをインポートし、それぞれをインポートして使用可能にします。 templatetagsというディレクトリが見つからない場合は、スキップします。ただし、INSTALLED_APPSで使用可能なすべてのオプションを確認しようとします。
django / templatetags / __ init __。py
のコードを見ると、templatetagsが(魔法のように)利用可能になっていることがわかります。コードを見て、
from django.conf import settings
for a in settings.INSTALLED_APPS:
try:
__path__.extend(__import__(a + '.templatetags', {}, {}, ['']).__path__)
except ImportError:
pass
これらのモジュールリストを __ path __
に追加するだけです。また、 __ path __
にリストされているものはすべて、 __ path __
リストが表示されるモジュールのサブモジュールとして存在するかのように扱われます。