Ticket #8037: ajaxtag.py

File ajaxtag.py, 1.5 KB (added by QingFeng, 16 years ago)
Line 
1# -*- coding: utf-8 -*-
2# GitHub http://gist.github.com/3247
3from django import template
4from django.template import resolve_variable
5
6register = template.Library()
7
8'''
9ROR link_to_remote clone
10
11Example 1:
12{% ajax %}
13link_to_remote
14 url:/dashboard/serverstatus/
15 update:#server_status_body
16 data:maxcount=10
17{% endajax %}
18
19Example 2:
20{% ajax %}
21link_to_remote
22 url:/dashboard/server/
23 update:#server
24{% endajax %}
25'''
26
27def parseAjaxCmd(output):
28 """parse ajax command"""
29 ajax_template={'link_to_remote':'''
30 <script>
31 $.ajax({
32 type:'GET',
33 url:'%(url)s',
34 dataType:'html',
35 data: "%(data)s",
36 success: function(msg){
37 $("%(update)s").html(msg)
38 }
39 })
40 </script>
41 '''}
42 output=filter(lambda x:x!='',
43 map(lambda x:x.strip(),
44 output.split('\n')
45 )
46 )
47 ajaxcmd,params=output[0],output[1:]
48 tmpl=ajax_template.get(ajaxcmd,'')
49 if tmpl=='':return ''
50 param_dict={'url':'/','data':'','update':'results'}
51 param_dict.update(
52 dict( [p.split(":") for p in params] )
53 )
54 print "param_dict",param_dict
55 return tmpl%param_dict
56
57class AjaxTagsNode(template.Node):
58 def __init__(self,nodelist):
59 self.nodelist = nodelist
60 def render(self, context):
61 output = self.nodelist.render(context)
62 return parseAjaxCmd(output)
63
64@register.tag('ajax')
65def ajaxtag(parser, token):
66 """
67 {% ajax %}
68 {% endajax %}
69 """
70 nodelist = parser.parse(('endajax',))
71 parser.delete_first_token()
72 return AjaxTagsNode(nodelist)
73
Back to Top