2012-05-05 102 views
1

我開始在Python中使用Jinja模板來開發Web應用程序。通過Jinja,我可以將我的Python代碼中的對象發送到我的index.html,但是是否可以從我的index.html接收對象到我的Python代碼?例如,來回傳遞一個列表。如果是這樣,你有什麼例子嗎?從Jinja模板發送對象到Python

謝謝!

+0

您可以使用AJAX或提交的HTML表單發送值。 – geoffspear

回答

1

爲什麼這樣做?您在模板中實現的任何邏輯都可以在您的應用程序的控制器中訪問,包括您放置在模板上下文中的任何變量。

如果數據因與用戶交互而發生變化,那麼在我看來,檢索數據的最佳方法是設置表單並使用普通的POST方法發送請求和所需的數據,正確編碼和轉義,回到您的程序。通過這種方式,您可以免受XSS問題以及其他不便之處。我絕不會在模板中進行任何處理,只能使用任何本地邏輯來修改演示文稿本身。

編輯考慮到你的情況,我建議如下:

  1. 用戶按下一個頁面上的按鈕,並調用獲取處理
  2. 獲取處理程序查詢數據庫和接收圖像的列表該列表被緩存,可能在一個內存緩存中,並且該密鑰與作爲模板顯示的GET URL中的參數編碼的圖像列表一起被髮送
  3. 圖像列表被傳遞到用於顯示的模板引擎
  4. 另一個按鈕被按下,不同的獲取處理程序使用收到的GET URL編碼的關鍵調用,消毒和驗證後,檢索緩存列表

如果你不希望中間緩存鍵值對的步驟,您可能希望將整個列表編碼到GET URL中,清潔和驗證的步驟應該像整個列表的關鍵一樣簡單。這兩種方法避免了往返數據庫,保護您免受惡意使用,並尊重數據,表示和邏輯的分離。

+0

嗨, 我的應用程序是這樣的: 1)用戶按下一個頁面上的按鈕,並調用獲取處理 2)獲取處理程序查詢數據庫和接收圖像 3)圖像的名單列表傳入模板引擎進行顯示 4)按下另一個按鈕並調用不同的Get處理程序 5)問題 - >我想要同一列圖像進行操作,但不想浪費時間再次查詢數據庫。我可以將圖像列表聲明爲全局圖像,但我希望避免使用全局圖像,並且在再次調用GET命令時寧願接收圖像列表。 謝謝 – swoosh

+0

@swoosh:你所描述的不是web應用程序和Internet如何工作,對不起。考慮讓多個用戶同時請求這個頁面,你會發現你用全局變量的方法是行不通的。 – Sergey

+0

這應該解決我的問題,我會檢查Memcache,感謝您的幫助,我很感激! – swoosh

-1

只是一個想法..你有沒有嘗試訪問你在處理模板後傳遞給jinja的字典中的變量?

+0

不,我的變量是在本地聲明的,當我需要再次訪問它們時,它們在不同的類中調用。見下面的評論。 謝謝 – swoosh