Frage

Ich versuche, einen Dekorateur für benutzerdefinierte Fehlerseiten in web2py zu implementieren nach einem der haiti Todos. Ref - http://web2py.com/AlterEgo/default/show/75

Ich versuche, es als Modul in / modules Verzeichnis so zu halten, dass ich kann, importieren Sie es in den Controllern und legen Sie den Dekorateur angemessen.

Ich habe die Fehlerbehandlung Dekorateur gehalten als /modules/onerror.py

und bin importieren es so von einem Controller sagen (or.py) -

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

HTTP-Objekt war in onerror.py nicht zur Verfügung, so dass ich eine tat -

from gluon.http import *

Aber dann readlized ich, dass das Request-Objekt ist auch nicht zur Verfügung der Dekorateur wie in der Linie -

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

Ich habe einige Zweifel -

  1. Is / modules ein guter Ort, eine solche wiederverwendbare Komponente zu halten?

  2. Sind die Module im Verzeichnis / modules automatisch als geladen neue web2py Instanz erstellt? Wenn ja, wie kann ich sie in einem Zugriff Controller?

  3. Gibt es eine Möglichkeit ich das Anfrage-Objekt zu diesem Dekorateur passieren kann von mein Controller? Hinweise sind willkommen.

Mein aktueller onerror.py - http://paste.pocoo.org/show/186165/ Die Art, wie ich in einem Controller zu verwenden bin versucht - http://paste.pocoo.org/show / 186167 /

Lassen Sie mich wissen, wenn ich es in einer nicht offensichtlichen Art und Weise mache.

War es hilfreich?

Lösung

Gelöst durch die web2py Benutzer-Mailingliste .

  

können Sie auch: onerror = load_import ( 'onerror') onerror

.      
    

HTTP-Objekt war in onerror.py nicht zur Verfügung, so dass ich ein tat -     von gluon.http import *

  
     

Python-Module sind normale Python-Modulen in web2py auch. Sie sehen nur   Python Schlüsselwörter, wenn Sie importieren. web2py hat 5 spezielle Objekte   (Anfrage, Antwort, Sitzung, Cache, T) und Ihre Anwendung hat andere (db,   Auth, crud). Weil sie bei jeder Anfrage instanziiert werden, sie   kann nicht durch das Modul importieren wollen, müssen sie explizit auf die übergeben werden   Funktionen im Modul. Geist, dass, während das ist umständlich das ist, was   andere Rahmenbedingungen stellen für alle Funktionen die ganze Zeit zu tun. web2py   erspart Ihnen diese für die Modelle und Controller.

     
    

Aber dann erkannte ich, dass das Request-Objekt ist auch nicht zur Verfügung     der Dekorateur wie in der Linie -     filename = os.path.join (request.folder, Ansichten / Fehler / Fehler     % I.html '% Status)     Ich habe Zweifel -     1. Sind die Module im Verzeichnis / modules automatisch als geladen     neue web2py Instanz erstellt? Wenn ja, wie kann ich darauf zugreifen?

  
     

Nein. Sie sind normale Python-Module. Sie müssen sie importieren verwenden   Sie.

     
    
        
  1. Gibt es eine Möglichkeit ich das Anfrage-Objekt zu diesem Dekorateur passieren kann von     mein Controller? Hinweise sind willkommen.
  2.     
  
     

Sie benötigen einen Meta-Dekorateur def meta_decoration (etwas):        def actual_decorator (f, etwas = etwas):              mach was du willst()              Rück f ()        Rückkehr Dekorateur @meta_decorator (Anfrage) def function_to_be_decorated (): return dict () Auf jeden Fall brauchen Sie nicht diese   Dekorateur. Schauen Sie in routes.examples.py für routes_onerror. Es gibt   eine einfache Art und Weise zu tun, was Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top