2011-01-22 113 views
1

在我管理的網站上,我們有包含頁面數據的JSON文件。然後我們使用這個JSON創建頁面。python and 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。

人們需要是靜態的,在其中將與的Hello World標題和內容的World, hello to you!file-1.html格式化的的file-0.html格式輸出(標題= Hello World Part II,含量= The sequel to hello world)。

第二個需要只是一個普通頁面file-all.html,其中包括一個JavaScript,當需要時通過AJAX拉動JSON,併爲每個頁面創建一個容器,其中包含具有JSON中所有內容/標題的子頁面的子頁面。

現在,我們使用Python爲file-0.html靜態頁面生成HTML,然後爲AJAX頁面生成JavaScript。雖然這是有效的,但這意味着對於一個非常小的項目會有很多代碼重複 - 每當我們想要更改標題的類時,我們必須用略微不同的語法來更改兩個地方。

是否有解決此問題的好方法,以便生成頁面的所有代碼(或儘可能多)都使用同一種語言? (這可能必須是JavaScript,因爲帶寬是一個問題 - 我們希望儘可能避免通過AJAX傳輸HTML。)

回答

1

你有兩個不錯的選擇:

  • 寫的頁面生成邏輯像鬍鬚的模板語言(http://mustache.github.com/)。然後你可以將這些模板編譯成Python(用於服務器端)和Javascript(用於客戶端)。兩個版本所使用的數據是相同的,只需要維護一個模板定義。

  • 在Javascript中寫入所有內容並在服務器上執行該JS。至少有兩個好的服務器端JS引擎:V8和Apache Rhino。

0

您可以使用服務器呈現頁面並通過AJAX響應來抓取頁面。雖然這可以避免代碼重複,但效率可能會降低,因爲您必須查詢服務器才能呈現每個頁面,而不是讓客戶端自己完成它(但這可能不是太多問題)。它不應占用太多帶寬,因爲它只是HTML(除非你從各種地方投擲模板)。當然,這種方法只適用於使用動態網站的情況。

或者,您可以在JavaScript中實現所有渲染邏輯,並使用類似PyV8的東西在Python中運行它。不過,我質疑這一點的效率(和理智)。