2011-01-22 10 views
1

私が管理するウェブサイトには、ページデータを含むJSONファイルがあります。次に、このJSONを使用してページを作成します。pythonとjavascript with html generation

データは、(もっと複雑なものを除いて)ほぼ同じように見えます。

[ 
    {"title": "Hello world", "content": "World, hello to you!"}, 
    {"title": "Hello world Part II", "content": "The sequel to hello world."}, 
    ... 
] 

このデータは、その後、HTMLに解析されます。さて、ここに問題があります。私たちはHTMLの2つのバージョンが必要です。

一つは静的である必要があり、World, hello to you!file-1.htmlHello Worldのタイトルや内容でフォーマットされるfile-0.htmlの形式で出力(タイトル= Hello World Part II、コンテンツ= The sequel to hello world)。

2番目のページは、必要なときにAJAX経由でJSONをプルするJavaScriptを含むプレーンページfile-all.htmlでなければならず、JSON内のすべてのコンテンツ/タイトルを含むサブページを含む各ページのコンテナを作成します。

今は、Pythonを使用して、file-0.html静的ページのHTMLを生成し、次にAJAXページのJavaScriptを生成します。これはうまくいくのですが、かなり小さいプロジェクトのためにコードの重複がたくさんあることを意味します。<h1>のクラスを変更するたびに、少し異なる構文で2つの場所を変更する必要があります。

ページを生成するすべてのコード(または可能な限り)が1つの言語になるように、この問題を解決する良い方法はありますか?

答えて

1

次の2つの良いオプションがあります。

  • は口ひげ(http://mustache.github.com/)のようなテンプレート言語でページ生成ロジックを記述します。次に、これらのテンプレートをPython(サーバー側)とJavascript(クライアント用)にコンパイルできます。両方のバージョンで消費されるデータは同じで、1つのテンプレート定義を保持するだけです。

  • すべてをJavascriptで記述し、そのJSをサーバーで実行します。少なくとも2つの優れたサーバーサイドJSエンジン、V8とApache Rhinoがあります。

0

サーバを使用して、ページをレンダリングし、AJAXレスポンスで取得できます。これは、帯域幅が問題であるため、JavaScriptである必要があります。これはコードの重複を防ぎますが、クライアントを自分で行うのではなく、各ページをレンダリングするためにサーバーに照会する必要があるため、効率が低下する可能性があります(これはあまり問題にならないかもしれません)。あまりにも多くの帯域幅を占めるべきではありません.HTMLだけなので(あらゆる場所からテンプレートを投げない限り)もちろん、このアプローチは、動的Webサイトを使用している場合にのみ機能します。

また、すべてのレンダリングロジックをJavaScriptで実装し、PyV8のようなものを使用してPythonから実行することができます。私はこれの効率性(そして健全性)に疑問を呈します。