Domanda

Sto cercando di implementare un decoratore per le pagine di errore personalizzate in web2py secondo una delle Todos haiti. Ref - http://web2py.com/AlterEgo/default/show/75

Sto cercando di tenerlo come modulo nella directory / modules in modo che io possa importarlo in controllori e posizionare il decoratore in modo appropriato.

Ho mantenuto la gestione degli errori decoratore come /modules/onerror.py

e sto importarlo come questo da un dire controllore (or.py) -

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

HTTP non era disponibile in onerror.py così ho fatto un -

from gluon.http import *

Ma poi ho readlized che l'oggetto di richiesta non è disponibile anche per il decoratore come nella linea -

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

ho qualche dubbio -

  1. Is / moduli di directory un buon posto per tenere un componente così riutilizzabile?

  2. sono i moduli nella directory / moduli caricati automaticamente come viene creata nuova istanza web2py? Se è così come posso accedere in un controllore?

  3. C'è un modo per passare l'oggetto richiesta a questa decoratore da il mio controller? I suggerimenti sono i benvenuti.

Il mio attuale onerror.py - http://paste.pocoo.org/show/186165/ Il modo in cui sto cercando di utilizzare in un controllore - http://paste.pocoo.org/show / 186.167 /

Fammi sapere se sto facendo in un modo non ovvio.

È stato utile?

Soluzione

Risolto attraverso gli utenti di web2py mailing list .

  

è anche possibile utilizzare: onerror = load_import ( 'onerror') onerror

.      
    oggetto

HTTP non era disponibile in onerror.py così ho fatto un -     dall'importazione gluon.http *

  
     

moduli python sono normali moduli python in web2py pure. Vedono solo   parole chiave pitone meno che non li importano. web2py dispone di 5 oggetti speciali   (Richiesta, risposta, sessione, cache, T) e la vostra applicazione ha altri (db,   auth, CRUD). Perché sono istanziati ad ogni richiesta,   non può importare dal modulo, devono essere passati in modo esplicito alla   funzioni del modulo. Mente che mentre questo è imbarazzante questo è ciò che   altri framework chiedono di fare tutto il tempo per tutte le funzioni. web2py   questo consente di risparmiare per i modelli e controllori.

     
    

Ma poi ho capito che l'oggetto di richiesta è anche disponibile per     il decoratore come nella linea -     filename = os.path.join (request.folder, 'viste / errori / errori     % I.html '% di stato)     Ho qualche dubbio -     1. I moduli nella directory / moduli caricati automaticamente come     viene creata nuova istanza web2py? Se è così come posso accedere?

  
     

No. Essi sono moduli pitone normali. Bisogna importarli da usare   loro.

     
    
        
  1. C'è un modo per passare l'oggetto richiesta a questa decoratore da     il mio controller? Suggerimenti sono i benvenuti.
  2.     
  
     

Hai bisogno di una meta meta_decoration decoratore def (qualcosa):        def actual_decorator (f, qualcosa = qualcosa):              Fai quello che vuoi()              ritorno f ()        ritorno decoratore @meta_decorator (richiesta) def function_to_be_decorated (): return dict () In ogni caso non è necessario questo   decoratore. Se vuoi in routes.examples.py per routes_onerror. C'è   un modo semplice per fare quello che vuoi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top