3

HTMLが古くなっていると判断した場合、DjangoのテンプレートローダーがSHPAMLを介して(つまり、直接または拡張/インクルードを介して)ロードするすべてのテンプレートを実行するようにする方法はありますか?

ディレクトリ全体で SHPAML を再帰的に呼び出す方法は知っていますが、SHPAML ソースを変更するたびに HTML を同期することを忘れないように、オンデマンドで実行できるようにしたいと考えています。

manage.py から SHPAML を呼び出すことも (少なくともテスト サーバーの場合は) うまくいくと思いますが、Django のテンプレート エンジンをハックして、プリプロセッサを介して読み込まれるすべてのファイルを実行できるようにした方がよいでしょう。

4

2 に答える 2

3

メソッドを継承してdjango.template.loaders.app_directories.Loader(または使用するローダーから)上書きすることload_template_sourceで、必要なものを実現できると思います。たとえば、次のようになります。

from django.template.loaders.app_directories import Loader
from shpaml import convert_text

class SHPAMLLoader(Loader):
    def load_template_source(self, *args, **kwargs):
        shpaml_source = super(SHPAMLLoader, self).load_template_source(*args, **kwargs)
        html = convert_text(shpaml_source)
        return html

TEMPLATE_LOADERS次に、settings.py のタプルの先頭にローダーを配置します。もちろん、テンプレートが読み込まれるたびに SHPAML から HTML への変換を行うことになるため、オーバーヘッドが発生する可能性があります。次期 Django 1.2 にはテンプレート キャッシング機能が搭載されており、そのオーバーヘッドを軽減するのに役立つ可能性があります...

免責事項: このコードは完全にテストされていません。申し訳ありません。

于 2010-01-25T10:44:54.340 に答える
1

piquadrat's answer のスニペットに基づいてプロジェクトを作成しました。もう少し機能が充実しており、django 1.1 と 1.2 (おそらく 1.0 も) をサポートしています。

将来的に役立つかもしれないと思った:)

于 2010-05-20T16:31:31.013 に答える