2011-01-04 11 views
20

GoogleのSoyテンプレートの優れた機能は、クライアント(JS)とサーバー(Java)で同じテンプレートを使用できることです。PythonとJavascriptの両方のテンプレートシステム?

現在、JSにコンパイルされたSoyテンプレートを使用してクライアント側のほとんどのページをレンダリングする予定です。しかし、私のバックエンドはPythonで(Tornadoを使って)書かれているので、電子メールや静的ページを生成するために同じテンプレートをサーバサイドで簡単に使用することはできません。

サーバー側で別のJavaコンポーネントを使用してこれらの大豆テンプレートをレンダリングすることもできますし、node.jsで動作させることもできます。これらのオプションのどちらも特にきれいに見えません。

JSとPythonの両方で動作する優れたテンプレートエンジンはありますか?誰もJSONテンプレートやTenjinで良い結果を得ていますか?他のアイデア?

答えて

11

Mustacheは、PythonとJavaScript(および他の多くの言語)の両方で実装されているテンプレートエンジンです。

http://mustache.github.com/

+0

返信いただきありがとうございます。マイク!あなたはそれを使った経験がありますか?どのようにそれを見つけるのですか?それを使用する大きなサイトがありますか? – nickbaum

+0

私はPlay(https://github.com/murz/play-mustache)と呼ばれるJava MVCフレームワーク用の口ひげモジュールを管理しています。口髭を使用する大規模なサイトには、Twitter、LinkedIn、Zendeskがあります。ここにリストがあります:https://github.com/janl/mustache.js/wiki/Beard-Competitionは – mike

+0

ねえマイクは、ちょうどこの答えに気づきました。ありがとう、本当に感謝します!私はまだSoyを使用していますが、テンプレートの一部をMustacheに変換し、その動作を確認しようとしています。 – nickbaum

7

マイケルKerrinはと呼ばれるプロジェクトを作成したpwt.jinja2js

プロジェクトの説明:

pwt.jinja2jsはJavaScriptにマクロを含む、有効なJinja2のテンプレートをコンパイルJinja2のテンプレートエンジンを拡張したものです。 JavaScript出力は、スクリプトタグを介して含めることも、アプリケーションのJavaScriptに追加することもできます。

閉鎖ライブラリを活用して、以下を生成し、我々はJavaスクリプトを生成することができますスイッチを滑ることでdocumentation

に述べたように:

Jinja2の:

{% namespace ns1 %} 

{% macro printusers(users) %} 
<ul> 
{% for user in users %} 
    <li><a href="{{ user.url }}">{{ user.username }}</a></li> 
{% endfor %} 
</ul> 
{% endmacro %} 

になる:

goog.provide('ns1'); 

goog.require('soy'); 

ns1.printusers = function(opt_data, opt_sb) { 
    var output = opt_sb || new soy.StringBuilder(); 
    output.append('\n<ul>\n'); 
    var userList = opt_data.users; 
    var userListLen = userList.length; 
    for (var userIndex = 0; userIndex < userListLen; userIndex++) { 
     var userData = userList[userIndex]; 
    output.append('\n <li><a href="', userData.url, '">', userData.username, '</a></li>\n'); 
} 
    output.append('\n</ul>\n'); 
    if (!opt_sb) return output.toString(); 
} 
+0

提案していただきありがとうございます! – nickbaum

2

私は、これは非常に古い質問ですが、参考のために、Pythonコードに大豆テンプレートをコンパイルすることが可能になりました実現しています。

https://pypi.python.org/pypi/soy

関連する問題