是否可以根據development.ini或production.ini中的特定用戶定義設置來更改視圖/模板的內容。金字塔:根據設置修改網站內容
作爲一個例子說,我正在開發一個金字塔web應用程序,其中列出了該班的所有學生。後端數據庫只有一個表 - 「學生」。現在我開發了一個可選腳本,該腳本還向數據庫添加了一個表「老師」。理想情況下,網絡應用程序應該能夠運行這兩種情況。如果教師表丟失了,它將不會查詢它並簡單地打印學生的詳細信息。如果教師表存在,它將打印教師姓名以及學生姓名。
在我看來,這可以通過以下方式之一完成 -
- 保持獨立的路由(URL)的教師+學生與學生只有 頁。問題是,當你只有學生信息時,你不能阻止實際撥打 的人撥打前者。這會導致 到不必要的錯誤頁面
- 在.ini文件中使用設置teacher_enabled = true/false。該設置可以通過設置['teacher_enabled']在__ init __.py文件中進行訪問。根據seeting變量是真/假來配置一條路線(如'home','/'),但將其映射到不同的視圖。這將不允許使用@view_config裝飾器和模板,這兩種情況將不得不分開
- 再次使用設置變量,以某種方式將其傳遞給視圖。只在視圖中進行相關查詢。例如。 - 如果teacher_enabled爲True,則查詢教師表,否則僅查詢學生表。將此變量也傳遞給模板,並決定是否顯示一些細節(例如教師姓名)。
所以我的問題是我應該使用哪種方法?如果設置變量要傳遞給視圖,那怎麼做?有沒有解決這個問題的標準方法?
謝謝!!所以你可以通過get_current_registry()來使用設置變量。還有一件事 - 既然模型在兩種情況下都會有所不同,建議保留教師模型定義並稍後處理異常(就像您已經完成的那樣)或者在models.py中也應該看看設置變量是否爲true/false然後才定義模型? – RedBaron 2012-04-20 05:34:02
您可以保留它,它不會造成任何傷害,並且可以讓您免於處理源自不存在的模型的任何錯誤。此外,金字塔文檔建議不要使用get_current_registry(),所以您應該儘可能少地使用它。 (request.registry是一個很好的選擇,如果可用) – 2012-04-20 05:41:25
再次感謝。是request.registry可用(至少在視圖中)。我想方法2聽起來最好的保留視圖函數和模板是分開的。雖然這會增加編碼量,但選項3會導致不必要的編碼複雜化。記住我處於哪種模式,並且使模板複雜化 – RedBaron 2012-04-20 05:50:42