关于在Web2Py中实现自定义错误页面的一些疑问

时间:2010-03-06 03:57:08

标签: python web2py

我正在尝试在web2py中为自定义错误页面实现装饰器 根据其中一个海地托多斯。参考 - http://web2py.com/AlterEgo/default/show/75

我正在尝试将其作为/ modules目录中的模块保留,以便我可以 将其导入控制器并适当放置装饰器。

我将错误处理装饰器保留为 /modules/onerror.py

并从控制器说(or.py) -

这样导入它
exec('from applications.%s.modules.onerror import onerror as onerror'
                                                       % request.application)

onerror.py中没有HTTP对象,所以我做了一个 -

from gluon.http import *

但后来我读到请求对象也无法使用 装饰者在行中 -

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

我有些疑惑 -

  1. / modules目录是保留这种可重用组件的好地方吗?

  2. / modules目录中的模块是否自动加载为 是否创建了新的web2py实例?如果是这样,我怎么能在一个访问它们 控制器?

  3. 有没有办法可以将请求对象传递给此装饰器 我的控制员?欢迎提示。

  4. 我当前的onerror.py - http://paste.pocoo.org/show/186165/ 我试图在控制器中使用的方式 - http://paste.pocoo.org/show/186167/

    如果我以不明显的方式这样做,请告诉我。

1 个答案:

答案 0 :(得分:1)

Solved通过web2py用户邮件列表。

  

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

     
    

onerror.py中没有HTTP对象,所以我做了 -     来自gluon.http import *

  
     

python模块也是web2py中的普通python模块。他们只看到了   python关键字,除非你导入它们。 web2py有5个特殊对象   (请求,响应,会话,缓存,T)和您的应用程序有其他(db,   auth,crud)。因为它们是在每次请求时实例化的   无法通过模块导入,必须将它们显式传递给   模块中的功能。请记住,虽然这很尴尬,但这是什么   其他框架要求为所有功能做所有时间。的web2py   为模型和控制器节省了这个。

     
    

但后来我意识到请求对象也不可用     装饰线如同 -     文件名= os.path.join(request.folder,'视图/错误/错误     %i.html'%状态)     我有些疑惑 -     1. / modules目录中的模块是否自动加载为     是否创建了新的web2py实例?如果是这样,我如何访问它们?

  
     

没有。它们是普通的python模块。您必须导入它们才能使用   他们。

     
    
        
  1. 有没有办法可以将请求对象传递给此装饰器     我的控制员?提示是受欢迎的。
  2.        
     

你需要一个元装饰器def meta_decoration(某物):        def actual_decorator(f,something = something):              做你想做的()              返回f()        return decorator @meta_decorator(request)def function_to_be_decorated():return dict()无论如何你不需要这个   装饰。查看routes.examples.py中的routes_onerror。有   做你想做的事的简单方法。