Des doutes sur la mise en œuvre des pages d'erreur personnalisée dans web2py
Question
Je suis en train de mettre en œuvre un décorateur pour les pages d'erreur personnalisées dans web2py selon l'une des Tous Haïti. Ref - http://web2py.com/AlterEgo/default/show/75
Je suis en train de le garder comme un module dans le répertoire / modules afin que je puisse l'importer dans les contrôleurs et placez-le décorateur de façon appropriée.
J'ai gardé décorateur de la gestion des erreurs comme /modules/onerror.py
et je suis importer comme celui-ci d'un contrôleur dire (or.py) -
exec('from applications.%s.modules.onerror import onerror as onerror'
% request.application)
HTTP objet n'a pas été disponible en onerror.py si je l'ai fait un -
from gluon.http import *
Mais alors je readlized que l'objet de la demande est également pas disponible à le décorateur comme dans la ligne -
filename=os.path.join(request.folder,'views/errors/error%i.html'%status)
J'ai quelques doutes -
-
est / répertoire des modules un bon endroit pour garder un tel composant réutilisable?
-
Les modules sont dans le répertoire / modules chargés automatiquement comme nouvelle instance web2py est créé? Si oui, comment puis-je y accéder dans un contrôleur?
-
Est-il possible que je peux passer l'objet de demande à ce décorateur de mon contrôleur? Les conseils sont les bienvenus.
Mon actuelle onerror.py - http://paste.pocoo.org/show/186165/ La façon dont je suis en train d'utiliser dans un contrôleur - http://paste.pocoo.org/show / 186167 /
Permettez-moi de savoir si je le fais d'une façon imprévisible.
La solution
Résolu par les utilisateurs web2py liste de diffusion .
vous pouvez également utiliser:. Onerror = load_import ( 'onerror') onerror
HTTP objet n'a pas été disponible en onerror.py si je l'ai fait un - d'importation gluon.http *
modules python sont des modules de python normales dans web2py aussi. Ils ne voient que mots-clés python à moins que vous les importer. web2py a 5 objets particuliers (Demande, réponse, session, cache, T) et votre application a d'autres (db, auth, crud). Parce qu'ils sont instanciés à chaque demande, ils ne peut pas importer par le module, ils doivent être transmis explicitement au les fonctions du module. L'esprit que tout cela est gênant c'est ce que d'autres cadres demandent de faire tout le temps pour toutes les fonctions. web2py vous permet d'économiser ce pour les modèles et les contrôleurs.
Mais alors je me suis aperçu que l'objet de la demande est également pas disponible à le décorateur comme dans la ligne - filename = os.path.join (request.folder, "vues / erreurs / erreur % I.html '% status) J'ai quelques doutes - 1. Les modules dans le répertoire / modules automatiquement chargé en tant que nouvelle instance web2py est créé? Si oui, comment puis-je y accéder?
Non. Ils sont des modules de python normaux. Vous devez les importer à utiliser leur.
- Est-il possible que je peux passer l'objet de demande à ce décorateur de mon contrôleur? Les conseils sont les bienvenus.
Vous avez besoin d'un décorateur méta def meta_decoration (quelque chose): def actual_decorator (f, quelque chose =): fais ce que tu veux() retourner f () retour décorateur @meta_decorator (demande) def function_to_be_decorated (): dict de retour () Quoi qu'il en soit, vous n'avez pas besoin de cette décorateur. Regardez dans routes.examples.py pour routes_onerror. Il y a une façon simple de faire ce que vous voulez.