何よりも、HTMLはノードのツリーです。それは単なるテキストではありません。
ただし、ほとんどのテンプレートエンジンは、単なるテキストであるため、入力と出力を処理します。彼らは彼らのタグ、彼ら{$foo}
の'と<% bar() %>
'の周りで何が起こるかを気にしません。また、何を出力するかについても気にしません。たまたま正しいhtmlが生成されることもありますが、それは単なる偶然です。彼らはそれを目指していませんでした。彼らが望んでいたのは、テキストストリーム内のいくつかの面白いマークを彼らの評価に置き換えることだけです。
出力をノードのセットとして扱うテンプレートエンジンがいくつかあります。XSLTとHamlが思い浮かびます。一部のタスクでは、これには利点があります。たとえば、自動的に再フォーマットできます(たとえば、すべての空のテキストノードを削除する、自動インデントする、ワードラップする)。それを破ることができる操作の厳密なサブセットを使用しない限り、結果は正しいxml/sgmlであることが保証されます。また、このようなテンプレートエンジンは、属性とテキストノードのどちらを記述しているかを厳密に認識しているため、テキストノードと属性で異なる方法で文字列を自動的に引用します。さらに、ノードがどこで開始および終了するかを知っているため、条件付きでノードを出力から削除できます。これは便利であり、その他の重要なノード操作を実行します。
XSLTの冗長性や機能性は気に入らないかもしれませんが、テンプレートがxmllint可能なXMLであり、出力が優れたsgml/xmlであることは非常に役立ちます。
したがって、問題は次のとおりです。非構造化テキストだけでなく、出力を正しいノードのセットとして扱うテンプレートエンジンを知っていますか?私はXSLT、Haml、そしていくつかのあいまいなpythonベースのものを知っています。うめき声!