我正在尝试在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)
我有些疑惑 -
/ modules目录是保留这种可重用组件的好地方吗?
/ modules目录中的模块是否自动加载为 是否创建了新的web2py实例?如果是这样,我怎么能在一个访问它们 控制器?
有没有办法可以将请求对象传递给此装饰器 我的控制员?欢迎提示。
我当前的onerror.py - http://paste.pocoo.org/show/186165/ 我试图在控制器中使用的方式 - http://paste.pocoo.org/show/186167/
如果我以不明显的方式这样做,请告诉我。
答案 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模块。您必须导入它们才能使用 他们。
- 有没有办法可以将请求对象传递给此装饰器 我的控制员?提示是受欢迎的。
醇>你需要一个元装饰器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。有 做你想做的事的简单方法。