代码之家  ›  专栏  ›  技术社区  ›  Abhishek Mishra

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

  •  2
  • Abhishek Mishra  · 技术社区  · 14 年前

    我正在尝试在Web2py中实现自定义错误页的修饰器 根据海地的一个托多。参考文献 http://web2py.com/AlterEgo/default/show/75

    我想把它作为一个模块保存在/modules目录中,这样我就可以 将其导入控制器并适当放置装饰器。

    我一直错误地处理装饰器 /模块/OnError.py

    我从一个控制器导入它,比如说(或.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. 有没有方法可以将请求对象从 我的控制器?欢迎提供提示。

    我现在的Onerror.py- http://paste.pocoo.org/show/186165/ 我在控制器中使用的方式- http://paste.pocoo.org/show/186167/

    让我知道我是否以一种不显眼的方式做这件事。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Encompass    10 年前

    Solved 通过web2py用户邮件列表。

    您还可以使用:onerror=load_import('onerror').onerror

    OnerRor.py中没有HTTP对象,所以我做了一个- 从gluon.http导入*

    python模块也是web2py中的普通python模块。他们只看到 除非导入python关键字。web2py有5个特殊对象 (请求、响应、会话、缓存、T)和您的应用程序有其他(DB, AUTH,CRUD)。因为它们在每次请求时都被实例化, 无法由模块导入,必须将它们显式传递给 模块中的功能。注意,虽然这很尴尬,但这就是 其他框架要求对所有函数都始终执行。Web2Py 为模型和控制器保存此项。

    但后来我意识到请求对象也不可用于 装饰工- 文件名=os.path.join(request.folder,'views/errors/error %i.html%状态) 我有些怀疑- 1。/modules目录中的模块是否自动作为 是否创建了新的web2py实例?如果是,我如何访问它们?

    不,它们是普通的python模块。你必须导入它们才能使用 他们。

    1. 有没有方法可以将请求对象从 我的控制器?欢迎提供提示。

    您需要一个元装饰器def meta_decoration(something): def实际装饰器(f,something=something): 做任何你想做的事 返回f-() 将decorator@meta_decorator(request)def函数_返回到_be_ecorated():返回dict()无论如何,您不需要它 装饰者。查看routes.examples.py中的routes\onerror。有 做你想做的事的简单方法。