Tickling Django

Hex Artifact Content
Login

Artifact f0d2f15be5890d0d3b9a1db7fa2b63c5972d365c:


0000: 69 6d 70 6f 72 74 20 54 6b 69 6e 74 65 72 0a 23  import Tkinter.#
0010: 66 72 6f 6d 20 64 6a 61 6e 67 6f 2e 74 65 6d 70  from django.temp
0020: 6c 61 74 65 20 69 6d 70 6f 72 74 20 52 65 71 75  late import Requ
0030: 65 73 74 43 6f 6e 74 65 78 74 0a 66 72 6f 6d 20  estContext.from 
0040: 64 6a 61 6e 67 6f 2e 74 65 6d 70 6c 61 74 65 20  django.template 
0050: 69 6d 70 6f 72 74 20 54 65 6d 70 6c 61 74 65 0a  import Template.
0060: 23 66 72 6f 6d 20 64 6a 61 6e 67 6f 2e 74 65 6d  #from django.tem
0070: 70 6c 61 74 65 2e 6c 6f 61 64 65 72 73 20 69 6d  plate.loaders im
0080: 70 6f 72 74 20 61 70 70 5f 64 69 72 65 63 74 6f  port app_directo
0090: 72 69 65 73 0a 0a 63 6c 61 73 73 20 54 63 6c 54  ries..class TclT
00a0: 65 6d 70 6c 61 74 65 28 54 65 6d 70 6c 61 74 65  emplate(Template
00b0: 29 3a 0a 20 20 20 20 69 6e 74 65 72 70 20 3d 20  ):.    interp = 
00c0: 4e 6f 6e 65 0a 0a 20 20 20 20 64 65 66 20 5f 5f  None..    def __
00d0: 69 6e 69 74 5f 5f 28 73 65 6c 66 2c 20 73 6f 75  init__(self, sou
00e0: 72 63 65 29 3a 0a 20 20 20 20 20 20 20 20 54 65  rce):.        Te
00f0: 6d 70 6c 61 74 65 2e 5f 5f 69 6e 69 74 5f 5f 28  mplate.__init__(
0100: 73 65 6c 66 2c 20 73 6f 75 72 63 65 29 0a 20 20  self, source).  
0110: 20 20 20 20 20 20 73 65 6c 66 2e 69 6e 74 65 72        self.inter
0120: 70 20 3d 20 54 6b 69 6e 74 65 72 2e 54 63 6c 28  p = Tkinter.Tcl(
0130: 29 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e 73  ).        self.s
0140: 6f 75 72 63 65 20 3d 20 73 6f 75 72 63 65 0a 0a  ource = source..
0150: 20 20 20 20 64 65 66 20 61 73 73 6f 63 5f 6f 62      def assoc_ob
0160: 28 73 65 6c 66 2c 20 6f 62 29 3a 0a 20 20 20 20  (self, ob):.    
0170: 20 20 20 20 64 65 66 20 63 61 6c 6c 65 72 28 2a      def caller(*
0180: 61 72 67 73 29 3a 0a 20 20 20 20 20 20 20 20 20  args):.         
0190: 20 20 20 66 75 6e 63 20 3d 20 67 65 74 61 74 74     func = getatt
01a0: 72 28 6f 62 2c 20 61 72 67 73 5b 30 5d 29 0a 20  r(ob, args[0]). 
01b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
01c0: 6e 20 66 75 6e 63 28 29 0a 20 20 20 20 20 20 20  n func().       
01d0: 20 70 72 6f 63 20 3d 20 73 65 6c 66 2e 69 6e 74   proc = self.int
01e0: 65 72 70 2e 72 65 67 69 73 74 65 72 28 63 61 6c  erp.register(cal
01f0: 6c 65 72 29 0a 20 20 20 20 20 20 20 20 23 69 6e  ler).        #in
0200: 74 65 72 70 2e 73 65 74 76 61 72 28 76 61 72 2c  terp.setvar(var,
0210: 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 20 72   proc).        r
0220: 65 74 75 72 6e 20 70 72 6f 63 0a 20 20 20 20 20  eturn proc.     
0230: 20 20 20 0a 20 20 20 20 64 65 66 20 72 65 6e 64     .    def rend
0240: 65 72 28 73 65 6c 66 2c 20 63 6f 6e 74 65 78 74  er(self, context
0250: 29 3a 0a 20 20 20 20 20 20 20 20 23 20 66 6c 61  ):.        # fla
0260: 74 74 65 6e 20 74 68 65 20 44 6a 61 6e 67 6f 20  tten the Django 
0270: 43 6f 6e 74 65 78 74 20 69 6e 74 6f 20 61 20 73  Context into a s
0280: 69 6e 67 6c 65 20 64 69 63 74 69 6f 6e 61 72 79  ingle dictionary
0290: 2e 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78  ..        contex
02a0: 74 5f 64 69 63 74 20 3d 20 7b 7d 0a 20 20 20 20  t_dict = {}.    
02b0: 20 20 20 20 66 6f 72 20 28 6b 2c 20 76 29 20 69      for (k, v) i
02c0: 6e 20 63 6f 6e 74 65 78 74 2e 69 74 65 72 69 74  n context.iterit
02d0: 65 6d 73 28 29 3a 0a 20 20 20 20 20 20 20 20 20  ems():.         
02e0: 20 20 20 69 66 20 74 79 70 65 28 76 29 2e 5f 5f     if type(v).__
02f0: 6e 61 6d 65 5f 5f 20 3d 3d 20 27 69 6e 73 74 61  name__ == 'insta
0300: 6e 63 65 27 3a 0a 20 20 20 20 20 20 20 20 20 20  nce':.          
0310: 20 20 20 20 20 20 76 20 3d 20 73 65 6c 66 2e 61        v = self.a
0320: 73 73 6f 63 5f 6f 62 28 76 29 0a 20 20 20 20 20  ssoc_ob(v).     
0330: 20 20 20 73 65 6c 66 2e 69 6e 74 65 72 70 2e 73     self.interp.s
0340: 65 74 76 61 72 28 6b 2c 20 76 29 0a 0a 20 20 20  etvar(k, v)..   
0350: 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 6c 66       return self
0360: 2e 69 6e 74 65 72 70 2e 63 61 6c 6c 28 22 73 75  .interp.call("su
0370: 62 73 74 22 2c 20 73 65 6c 66 2e 73 6f 75 72 63  bst", self.sourc
0380: 65 29 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 20  e)..        for 
0390: 64 20 69 6e 20 63 6f 6e 74 65 78 74 2e 64 69 63  d in context.dic
03a0: 74 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 0a  ts:            .
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
03c0: 65 78 74 5f 64 69 63 74 2e 75 70 64 61 74 65 28  ext_dict.update(
03d0: 64 29 0a 20 20 20 20 20 20 20 20 6c 20 3d 20 64  d).        l = d
03e0: 69 63 74 5f 74 6f 5f 6c 69 73 74 28 63 6f 6e 74  ict_to_list(cont
03f0: 65 78 74 5f 64 69 63 74 29 0a 20 20 20 20 20 20  ext_dict).      
0400: 20 20 72 65 74 75 72 6e 20 73 75 70 65 72 28 54    return super(T
0410: 65 6d 70 6c 61 74 65 2c 20 73 65 6c 66 29 2e 72  emplate, self).r
0420: 65 6e 64 65 72 28 63 6f 6e 74 65 78 74 5f 64 69  ender(context_di
0430: 63 74 29 0a 0a 0a 23 20 63 6c 61 73 73 20 54 63  ct)...# class Tc
0440: 6c 54 65 6d 70 6c 61 74 65 4c 6f 61 64 65 72 28  lTemplateLoader(
0450: 42 61 73 65 4c 6f 61 64 65 72 29 3a 0a 23 20 20  BaseLoader):.#  
0460: 20 20 20 69 73 5f 75 73 61 62 6c 65 20 3d 20 54     is_usable = T
0470: 72 75 65 0a 0a 23 20 20 20 20 20 64 65 66 20 6c  rue..#     def l
0480: 6f 61 64 5f 74 65 6d 70 6c 61 74 65 28 73 65 6c  oad_template(sel
0490: 66 2c 20 74 65 6d 70 6c 61 74 65 5f 6e 61 6d 65  f, template_name
04a0: 2c 20 74 65 6d 70 6c 61 74 65 5f 64 69 72 73 3d  , template_dirs=
04b0: 4e 6f 6e 65 29 3a 0a 23 20 20 20 20 20 20 20 20  None):.#        
04c0: 20 73 6f 75 72 63 65 2c 20 6f 72 69 67 69 6e 20   source, origin 
04d0: 3d 20 73 65 6c 66 2e 6c 6f 61 64 5f 74 65 6d 70  = self.load_temp
04e0: 6c 61 74 65 5f 73 6f 75 72 63 65 28 74 65 6d 70  late_source(temp
04f0: 6c 61 74 65 5f 6e 61 6d 65 2c 20 74 65 6d 70 6c  late_name, templ
0500: 61 74 65 5f 64 69 72 73 29 0a 23 20 20 20 20 20  ate_dirs).#     
0510: 20 20 20 20 74 65 6d 70 6c 61 74 65 20 3d 20 54      template = T
0520: 63 6c 54 65 6d 70 6c 61 74 65 28 73 6f 75 72 63  clTemplate(sourc
0530: 65 29 0a 23 20 20 20 20 20 20 20 20 20 72 65 74  e).#         ret
0540: 75 72 6e 20 74 65 6d 70 6c 61 74 65 2c 20 6f 72  urn template, or
0550: 69 67 69 6e 0a                                   igin.