I've started this as SoC project, however is hasn't passed so I'm publising the sources, maybe you'll find them useful.
I've uses Json as the transport layer. You will need Json-py library (http://sourceforge.net/projects/json-py/). To make server-side code you need to make a new django view: from django.http import HttpResponse from cmh.apps.rpc.minjson import write as JsonWrite import re def rpc(request): if ('module' in request.GET) and ('function' in request.GET): rx = re.compile('^[a-z]+$') if rx.match(request.GET['module']): try: rpc_fn = getattr(__import__('testproject.%s.rpc'%request.GET['module'], '', '', ['']), request.GET['function']) except ImportError, e: return HttpResponse('module not found') return HttpResponse(JsonWrite(rpc_fn(request))) else: return HttpResponse('bad module name') else: return HttpResponse('bad module') This request accepts only module names from small latin chars, you need to change regular expression ('^[a-z]+$') if you have other module names. RPC functions are stored at modules' directories in files rpc.py. You need to change 'testproject.%s.rpc' so that it point to your module's rpc file, e.g. my CMS uses 'cmh.apps.%s.rpc' (all my modules are stored in apps folder). The client-side is handled by MochiKit. <script type="text/javascript" src="/js/mochikit/MochiKit/Base.js"></script> <script type="text/javascript" src="/js/mochikit/MochiKit/Async.js"></script> <script type="text/javascript" src="/js/mochikit/MochiKit/DOM.js"></script> <script type="text/javascript"> // Point to your rpc view var baseURL = "http://localhost:8000/rpc/"; function processRPC(req) { json = evalJSONRequest(req); for(var i in json) { switch(json[i].action) { case "replace": var element = getElement(json[i].id); element.innerHTML = json[i].value; break; // handle additional operations like add_before, add_after, hide, show, etc. } } } function doRPC(mod, func, method, s_get, s_post) { var d; var req = getXMLHttpRequest(); if (req.overrideMimeType) { req.overrideMimeType("text/plain"); } if(method == "GET") { req.open("GET", baseURL + "?module=" + mod + "&function=" + func + s_get, true); d = sendXMLHttpRequest(req).addCallback(processRPC); } else { req.open("POST", baseURL + "?module=" + mod + "&function=" + func + s_get, true); d = sendXMLHttpRequest(req, s_post).addCallback(processRPC); } return d; } </script> sample usage: <a href="javascript: doRPC('rpc', 'test', 'GET', '&some_extra=args');">GET</a> <a href="javascript: doRPC('rpc', 'test', 'POST', '', 'some_extra=args');">POST</a> here's how you handle this call (testproject/rpc/rpc.py): def test(args): action1 = { 'action': 'replace', 'id': 'footer', 'value': '<h1>footer changed ;)</h1>' } action2 = { 'action': 'replace', 'id': 'content-related', 'value': '<h1>some more modifications</h1>' } return [action1, action2] Maybe this code doesn't look a django-way, but I'm still working on it. -- Sincerely, Vladimir "Farcaller" Pouzanov http://www.hackndev.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users -~----------~----~----~----~------~----~------~--~---