2

私たちはかなり前に、Django プロジェクトで Mako テンプレートを使用することを決定しました。多くの再利用可能なアプリは (明らかに) Django テンプレートが利用可能であると想定しているため、Django テンプレートもサポートしています。Mako から Django テンプレートをレンダリングできることがわかりましたが、逆に機能させる方法を見つけることができませんでした。

アプリのリストに django-articles を追加したところ、Django テンプレートを使用しています。base.htmlファイルがオーバーライドされた Django テンプレートであると想定しています。残念ながら、私たちのメイン サイトは Mako を使用して構築されています。host私は、 Mako 内で Django テンプレートを自分自身にきれいに配置する方法をまだ見つけられていません。

私が欲しいと思うのは、マコに呼びかけて「埋め込み」を要求するテンプレートタグです。

現在、Mako テンプレートはすべて次のことを行っています。

<%inherit file="mako/base.html"/>

私が欲しいのは、Django テンプレートから次のようなことができるようにすることです:

{% render_in_mako 'mako/base.html' 'body' %}

`mako/base.html' に以下を記述:

</head>
  <body>
    <%include file="header.html" />

    ${next.body()}

  </body>
</html>

以前にこれをしなければならなかった人はいますか?テンプレートタグの書き方に慣れていません。これができると思いますか?別の方法としては、おそらく Mako のすべてのテンプレートを書き直すことになるでしょうが、それは私にはまったく魅力的ではありません。テンプレートタグは、Mako を使用している多くのプロジェクトにとって非常に役立つと思います。

4

1 に答える 1

0

良い質問!Django のカスタム テンプレート タグのおかげで、Django テンプレート内で Mako テンプレートをレンダリングできます。Django docs はプロセスをより詳細に説明していますが、基本的にはタグの入力を解析し、引数が有効であることを確認し、django.template.Nodeそこからオブジェクトを作成する必要があります。はNode、テンプレート タグの引数を受け取り、render()それらを処理するメソッドを定義するオブジェクトです。ただし、テンプレート タグが返すテキストをエスケープするには、特別な注意を払う必要があります。HTML タグは絶対にエスケープしたくないからです。どうやらDjangoの人々もこれを検討しており、同じドキュメントに「自動エスケープの考慮事項」と呼ばれるセクションがあり、その方法を説明しています。

テンプレートタグからの入力を解析する方法を理解したら (実際には引数を検証するだけです)、Node.render()タグで指定されたテンプレートとコンテキストを使用して Mako のレンダリング関数を呼び出すメソッドを定義し、出力を Django に返すことができます。テンプレート。ただし、「body」を 2 番目の引数として使用したときの説明には少し混乱しました。Mako テンプレートと比較して、これはどういう意味ですか? Mako を使用したことがないことは認めざるを得ませんが、ドキュメントをざっと見ただけで、Django および Jinja2 システムと多くの類似点があることがわかります。この仮定が間違っていたら申し訳ありません。Django テンプレート タグのドキュメントを読み進めることができれば、これは合理的な取り組みのように思えます。頑張ってください!

于 2011-04-10T09:41:08.173 に答える