2010-03-06 38 views
2

我試圖按照海地Todos中的一個web2py 實現自定義錯誤頁面的裝飾器。 Ref - http://web2py.com/AlterEgo/default/show/75在Web2Py中實現自定義錯誤頁面的一些懷疑

我試圖將它作爲模塊保存在/ modules目錄中,以便我可以將其導入到控制器中並適當放置裝飾器。

我一直錯誤處理的裝飾爲 /modules/onerror.py

和我從控制器導入像這樣說(or.py) -

exec('from applications.%s.modules.onerror import onerror as onerror' 
                 % request.application) 

HTTP對象不在onerror.py可用的,所以我做了 -

from gluon.http import * 

但後來我readlized該請求對象也是不可 的dec演說者在行 -

filename=os.path.join(request.folder,'views/errors/error%i.html'%status) 

我有些懷疑 -

  1. 是/ modules目錄的好地方,保持這樣一個可重用的組件?

  2. /modules目錄中的模塊是否自動加載爲 新的web2py實例已創建?如果是這樣,我怎樣才能在 控制器中訪問它們?

  3. 有沒有一種方法可以將請求對象從 我的控制器傳遞給這個裝飾器?歡迎提示。

我現在onerror.py - http://paste.pocoo.org/show/186165/ 我想在一個控制器使用的方式 - http://paste.pocoo.org/show/186167/

讓我知道如果我在一個不明顯的方式這樣做。

回答

1

Solved通過web2py用戶郵件列表。

你也可以使用:onError的= load_import( '的onerror')的onerror

HTTP對象是不是在onerror.py可用,所以我做了 - 從gluon.http進口*

python模塊也是web2py中的普通python模塊。除非您導入python關鍵字,否則他們只會看到 。 web2py有5個特殊對象 (請求,響應,會話,緩存,T),你的應用程序有其他的(db, auth,crud)。因爲它們在每個請求都被實例化,所以它們不能被模塊導入,它們必須被明確地傳遞給模塊中的 函數。請注意,雖然這很尷尬,但這是其他框架要求爲所有功能始終執行的操作。 web2py 爲您節省了模型和控制器的工作量。

但後來我意識到該請求對象也是不可 裝飾作爲線 - 文件名= os.path.join(request.folder,'視圖/錯誤/錯誤 %I。 html'%status) 我有一些疑問 - 1./modules目錄中的模塊是否自動加載爲 新的web2py實例已創建?如果是這樣,我如何訪問它們?

不,他們是普通的python模塊。你必須導入他們使用 他們。

  • 是否有一種方法可以將請求傳遞對象從 我的控制器這個裝飾?歡迎提示。
  • 你需要一個元裝飾高清meta_decoration(東西): 高清actual_decorator(F,什麼東西=): do_whatever_you_want() 返回f()的返回 裝飾@meta_decorator(請求)高清function_to_be_decorated( ):return dict()無論如何,你不需要這個裝飾器 。查看routes.onerror的routes.examples.py。有 一個簡單的方法來做你想做的。