Julien Cigar
jcigar at ulb.ac.be
Tue Mar 28 05:36:46 EST 2006
Hello, I'm writing my first home-made handler (inspired by mod_publisher). I wanted to do a "ruby on rails"-like dispatcher, so when I call : http://somehost.com/foo/bar it should call the bar() method of the class (controller) foo which lives under controllers/ Please note that it is not at all complete, I'm just playing with it at the moment .. I face a strange problem, when I render my html file with my template engine (clearsilver), the problem comes from the line: ... <link rel="stylesheet" type="text/css" href="styles/screen.css"></link> ... Here is the error : [notice] mod_python: (Re)importing module 'handler' [notice] mod_python: (Re)importing module 'controllers.default' [error] PythonHandler handler: Traceback (most recent call last):, referer: http://canis/ias/default/ [error] PythonHandler handler: File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line 299, in HandlerDispatch\n result = object(req), referer: http://canis/ias/default/ [error] PythonHandler handler: File "/home/jcigar/public_html/invasive_species/public/handler.py", line 35, in handler\n object = getattr(module, method), referer: http://canis/ias/default/ [error] PythonHandler handler: AttributeError: 'module' object has no attribute 'styles', referer: http://canis/ias/default/ Here is the code of my handler: #!/usr/bin/python import sys from mod_python import apache, util sys.path.append('/home/jcigar/public_html/invasive_species/application') def handler(req): req.allow_methods(["GET", "POST"]) if req.method not in (["GET", "POST"]): raise apache.SERVER_RETURN, apache.HTTP_METHOD_NOT_ALLOWED (controller, method) = ("default", "index") if req.path_info: path_info = req.path_info.strip('/').split('/') if path_info[0].isalpha(): controller = path_info[0] if len(path_info) > 1 and path_info[1].isalpha(): method = path_info[1] config = req.get_config() (autoreload, log) = (int(config.get("PythonAutoReload", 1)), int(config.get("PythonDebug", 0))) try: module = apache.import_module('controllers.%s' % (controller, ), autoreload=autoreload, log=log) except ImportError: req.log_error('Cannot import controller %s' % (controller, )) object = getattr(module, method) if callable(object): req.params = util.FieldStorage(req, keep_blank_values=1) result = util.apply_fs_data(object, req.params, req=req) else: req.log_error('%s is not callable' % (object, )) return apache.HTTP_INTERNAL_SERVER_ERROR if result or req.bytes_sent or req.next: req.content_type = 'text/html' req.write(result) return apache.OK else: req.log_error('Nothing returned') return apache.HTTP_INTERNAL_SERVER_ERROR In advance, thanks for support ! Julien -- Julien Cigar Belgian Biodiversity Platform http://www.biodiversity.be Université Libre de Bruxelles Campus de la Plaine CP 257 Bâtiment NO, Bureau 4 N4 115C (Niveau 4) Boulevard du Triomphe, entrée ULB 2 B-1050 Bruxelles Work: jcigar at ulb.ac.be Personal: mage at mordor.ath.cx
|