diff options
Diffstat (limited to 'docs/html/dev_guide/placeholders.html')
-rw-r--r-- | docs/html/dev_guide/placeholders.html | 582 |
1 files changed, 0 insertions, 582 deletions
diff --git a/docs/html/dev_guide/placeholders.html b/docs/html/dev_guide/placeholders.html deleted file mode 100644 index b363c38..0000000 --- a/docs/html/dev_guide/placeholders.html +++ /dev/null @@ -1,582 +0,0 @@ - -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Placeholders — Cheetah3 - The Python-Powered Template Engine</title> - <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> - <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT: '../', - VERSION: '3.1.0', - COLLAPSE_INDEX: false, - FILE_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="index" title="Index" href="../genindex.html" /> - <link rel="search" title="Search" href="../search.html" /> - <link rel="next" title="Patching Cheetah" href="patching.html" /> - <link rel="prev" title="Directives: Error Handling" href="errorHandling.html" /> - </head> - <body> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="../genindex.html" title="General Index" - accesskey="I">index</a></li> - <li class="right" > - <a href="../py-modindex.html" title="Python Module Index" - >modules</a> |</li> - <li class="right" > - <a href="patching.html" title="Patching Cheetah" - accesskey="N">next</a> |</li> - <li class="right" > - <a href="errorHandling.html" title="Directives: Error Handling" - accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> »</li> - <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> »</li> - </ul> - </div> - <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> - <div class="sphinxsidebarwrapper"> - <h3><a href="../index.html">Table Of Contents</a></h3> - <ul> -<li><a class="reference internal" href="#">Placeholders</a><ul> -<li><a class="reference internal" href="#simple-placeholders">Simple placeholders</a></li> -<li><a class="reference internal" href="#complex-placeholders">Complex placeholders</a></li> -</ul> -</li> -</ul> - - <h4>Previous topic</h4> - <p class="topless"><a href="errorHandling.html" - title="previous chapter">Directives: Error Handling</a></p> - <h4>Next topic</h4> - <p class="topless"><a href="patching.html" - title="next chapter">Patching Cheetah</a></p> - <div role="note" aria-label="source link"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="../_sources/dev_guide/placeholders.rst.txt" - rel="nofollow">Show Source</a></li> - </ul> - </div> -<div id="searchbox" style="display: none" role="search"> - <h3>Quick search</h3> - <form class="search" action="../search.html" method="get"> - <div><input type="text" name="q" /></div> - <div><input type="submit" value="Go" /></div> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body" role="main"> - - <div class="section" id="placeholders"> -<h1>Placeholders<a class="headerlink" href="#placeholders" title="Permalink to this headline">¶</a></h1> -<p>(placeholders)</p> -<div class="section" id="simple-placeholders"> -<h2>Simple placeholders<a class="headerlink" href="#simple-placeholders" title="Permalink to this headline">¶</a></h2> -<p>(placeholders.simple)</p> -<p>Let’s add a few $placeholders to our template:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span> -<span class="gp">>>> </span><span class="n">values</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'what'</span><span class="p">:</span> <span class="s1">'surreal'</span><span class="p">,</span> <span class="s1">'punctuation'</span><span class="p">:</span> <span class="s1">'?'</span><span class="p">}</span> -<span class="gp">>>> </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">"""</span><span class="se">\</span> -<span class="gp">... </span><span class="s2">Hello, $what world$punctuation</span> -<span class="gp">... </span><span class="s2">One of Python's least-used functions is $xrange.</span> -<span class="gp">... </span><span class="s2">"""</span><span class="p">,</span> <span class="p">[</span><span class="n">values</span><span class="p">])</span> -<span class="gp">>>> </span><span class="nb">print</span> <span class="n">t</span> -<span class="go">Hello, surreal world?</span> -<span class="go">One of Python's least-used functions is <built-in function xrange>.</span> - -<span class="gp">>>> </span><span class="nb">print</span> <span class="n">t</span><span class="o">.</span><span class="n">generatedModuleCode</span><span class="p">()</span> -<span class="go"> 1 #!/usr/bin/env python</span> - -<span class="go"> 2 """</span> -<span class="go"> 3 Autogenerated by CHEETAH: The Python-Powered Template Engine</span> -<span class="go"> 4 CHEETAH VERSION: 0.9.12</span> -<span class="go"> 5 Generation time: Sun Apr 21 00:53:01 2002</span> -<span class="go"> 6 """</span> - -<span class="go"> 7 __CHEETAH_genTime__ = 'Sun Apr 21 00:53:01 2002'</span> -<span class="go"> 8 __CHEETAH_version__ = '0.9.12'</span> - -<span class="go"> 9 ##################################################</span> -<span class="go"> 10 ## DEPENDENCIES</span> - -<span class="go"> 11 import sys</span> -<span class="go"> 12 import os</span> -<span class="go"> 13 import os.path</span> -<span class="go"> 14 from os.path import getmtime, exists</span> -<span class="go"> 15 import time</span> -<span class="go"> 16 import types</span> -<span class="go"> 17 from Cheetah.Template import Template</span> -<span class="go"> 18 from Cheetah.DummyTransaction import DummyTransaction</span> -<span class="go"> 19 from Cheetah.NameMapper import NotFound, valueForName,</span> -<span class="go"> valueFromSearchList</span> -<span class="go"> 20 import Cheetah.Filters as Filters</span> -<span class="go"> 21 import Cheetah.ErrorCatchers as ErrorCatchers</span> - -<span class="go"> 22 ##################################################</span> -<span class="go"> 23 ## MODULE CONSTANTS</span> - -<span class="go"> 24 try:</span> -<span class="go"> 25 True, False</span> -<span class="go"> 26 except NameError:</span> -<span class="go"> 27 True, False = (1==1), (1==0)</span> - -<span class="go"> 28 ##################################################</span> -<span class="go"> 29 ## CLASSES</span> - -<span class="go"> 30 class GenTemplate(Template):</span> -<span class="go"> 31 """</span> -<span class="go"> 32</span> -<span class="go"> 33 Autogenerated by CHEETAH: The Python-Powered Template Engine</span> -<span class="go"> 34 """</span> - -<span class="go"> 35 ##################################################</span> -<span class="go"> 36 ## GENERATED METHODS</span> -</pre></div> -</div> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">37</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">):</span> -<span class="mi">38</span> <span class="s2">"""</span> -<span class="s2">39</span> -<span class="s2">40 """</span> - -<span class="mi">41</span> <span class="n">Template</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">)</span> - -<span class="mi">42</span> <span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> -<span class="mi">43</span> <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> -<span class="mi">44</span> <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> -<span class="mi">45</span> <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span> -<span class="mi">46</span> <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span> -<span class="mi">47</span> <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span> -<span class="mi">48</span> <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span> - - -<span class="mi">49</span> <span class="s2">"""</span> -<span class="s2">50 This is the main method generated by Cheetah</span> -<span class="s2">51 """</span> - -<span class="mi">52</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span> -<span class="mi">53</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span> -<span class="mi">54</span> <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span> -<span class="mi">55</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span> -<span class="mi">56</span> <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span> -<span class="mi">57</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span> -<span class="mi">58</span> <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span> -<span class="mi">59</span> -<span class="mi">60</span> <span class="c1">########################################</span> -<span class="mi">61</span> <span class="c1">## START - generated method body</span> -<span class="mi">62</span> -<span class="mi">63</span> <span class="n">write</span><span class="p">(</span><span class="s1">'Hello, '</span><span class="p">)</span> -<span class="mi">64</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"what"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$what' at</span> - <span class="c1"># line 1, col 8.</span> -<span class="mi">65</span> <span class="n">write</span><span class="p">(</span><span class="s1">' world'</span><span class="p">)</span> -<span class="mi">66</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"punctuation"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># '$punctuation' at line 1, col 19.</span> -<span class="mi">67</span> <span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">One of Python's least-used methods is "</span><span class="p">)</span> -<span class="mi">68</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">xrange</span><span class="p">))</span> <span class="c1"># generated from '$xrange' at line 2,</span> - <span class="c1"># col 39.</span> -<span class="mi">69</span> <span class="n">write</span><span class="p">(</span><span class="s1">'.</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> -<span class="mi">70</span> -<span class="mi">71</span> <span class="c1">########################################</span> -<span class="mi">72</span> <span class="c1">## END - generated method body</span> -<span class="mi">73</span> -<span class="mi">74</span> <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span> -<span class="mi">75</span> <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span> -<span class="mi">76</span> <span class="k">else</span><span class="p">:</span> -<span class="mi">77</span> <span class="k">return</span> <span class="s2">""</span> -</pre></div> -</div> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">78</span> -<span class="mi">79</span> <span class="c1">##################################################</span> -<span class="mi">80</span> <span class="c1">## GENERATED ATTRIBUTES</span> - -<span class="mi">81</span> <span class="fm">__str__</span> <span class="o">=</span> <span class="n">respond</span> -<span class="mi">82</span> <span class="n">_mainCheetahMethod_for_GenTemplate</span><span class="o">=</span> <span class="s1">'respond'</span> - -<span class="mi">83</span> <span class="c1"># CHEETAH was developed by Tavis Rudd, Chuck Esterbrook, Ian Bicking</span> - <span class="c1"># and Mike Orr;</span> -<span class="mi">84</span> <span class="c1"># with code, advice and input from many other volunteers.</span> -<span class="mi">85</span> <span class="c1"># For more information visit http://cheetahtemplate.org/</span> - -<span class="mi">86</span> <span class="c1">##################################################</span> -<span class="mi">87</span> <span class="c1">## if run from command line:</span> -<span class="mi">88</span> <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span> -<span class="mi">89</span> <span class="n">GenTemplate</span><span class="p">()</span><span class="o">.</span><span class="n">runAsMainProgram</span><span class="p">()</span> -</pre></div> -</div> -<p>(Again, I have added line numbers and split the lines as in the -previous chapter.)</p> -<p>This generated template module is different from the previous one -in several trivial respects and one important respect. Trivially, -{._filePath} and {._fileMtime} are not updated in -{.__init__}, so they inherit the value {None} from {Template}. -Also, that if-stanza in {.respond} that recompiles the template if -the source file changes is missing - because there is no source -file. So this module is several lines shorter than the other one.</p> -<p>But the important way this module is different is that instead of -the one {write} call outputting a string literal, this module has a -series of {write} calls (lines 63-69) outputting successive chunks -of the template. Regular text has been translated into a string -literal, and placeholders into function calls. Every placeholder is -wrapped inside a {filter} call to apply the current output filter. -(The default output filter converts all objects to strings, and -{None} to {“”}.)</p> -<p>Placeholders referring to a Python builtin like {xrange} (line 68) -generate a bare variable name. Placeholders to be looked up in the -searchList have a nested function call; e.g.,</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"what"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$what' at line 1, col 8.</span> -</pre></div> -</div> -<p>{VFS}, remember, is a function imported from {Cheetah.NameMapper} -that looks up a value in a searchList. So we pass it the -searchList, the name to look up, and a boolean (1) indicating we -want autocalling. (It’s {1} rather than {True} because it’s -generated from an {and} expression, and that’s what Python 2.2 -outputs for true {and} expressions.)</p> -</div> -<div class="section" id="complex-placeholders"> -<h2>Complex placeholders<a class="headerlink" href="#complex-placeholders" title="Permalink to this headline">¶</a></h2> -<p>(placeholders.complex)</p> -<p>Placeholders can get far more complicated than that. This example -shows what kind of code the various NameMapper features produce. -The formulas are taken from Cheetah’s test suite, in the -{Cheetah.Tests.SyntaxAndOutput.Placeholders} class.</p> -<div class="highlight-default"><div class="highlight"><pre><span></span>1 placeholder: $aStr -2 placeholders: $aStr $anInt -2 placeholders, back-to-back: $aStr$anInt -1 placeholder enclosed in {}: ${aStr} -1 escaped placeholder: \$var -func placeholder - with (): $aFunc() -func placeholder - with (int): $aFunc(1234) -func placeholder - with (string): $aFunc('aoeu') -func placeholder - with ('''\nstring'\n'''): $aFunc('''\naoeu'\n''') -func placeholder - with (string*int): $aFunc('aoeu'*2) -func placeholder - with (int*float): $aFunc(2*2.0) -Python builtin values: $None $True $False -func placeholder - with ($arg=float): $aFunc($arg=4.0) -deeply nested argstring: $aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ): -function with None: $aFunc(None) -autocalling: $aFunc! $aFunc(). -nested autocalling: $aFunc($aFunc). -list subscription: $aList[0] -list slicing: $aList[:2] -list slicing and subcription combined: $aList[:2][0] -dict - NameMapper style: $aDict.one -dict - Python style: $aDict['one'] -dict combined with autocalled string method: $aDict.one.upper -dict combined with string method: $aDict.one.upper() -nested dict - NameMapper style: $aDict.nestedDict.two -nested dict - Python style: $aDict['nestedDict']['two'] -nested dict - alternating style: $aDict['nestedDict'].two -nested dict - NameMapper style + method: $aDict.nestedDict.two.upper -nested dict - alternating style + method: $aDict['nestedDict'].two.upper -nested dict - NameMapper style + method + slice: $aDict.nestedDict.two.upper[:4] -nested dict - Python style, variable key: $aDict[$anObj.meth('nestedDict')].two -object method: $anObj.meth1 -object method + complex slice: $anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] -very complex slice: $( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] ) -$_('a call to gettext') -</pre></div> -</div> -<p>We’ll need a big program to set up the placeholder values. Here it -is:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python</span> -<span class="kn">from</span> <span class="nn">ComplexExample</span> <span class="k">import</span> <span class="n">ComplexExample</span> - -<span class="k">try</span><span class="p">:</span> <span class="c1"># Python >= 2.2.1</span> - <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span> -<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c1"># Older Python</span> - <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span> - -<span class="k">class</span> <span class="nc">DummyClass</span><span class="p">:</span> - <span class="n">_called</span> <span class="o">=</span> <span class="kc">False</span> - <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="s1">'object'</span> - - <span class="k">def</span> <span class="nf">meth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s2">"arff"</span><span class="p">):</span> - <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> - - <span class="k">def</span> <span class="nf">meth1</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s2">"doo"</span><span class="p">):</span> - <span class="k">return</span> <span class="n">arg</span> - - <span class="k">def</span> <span class="nf">meth2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="o">=</span><span class="s2">"a1"</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="s2">"a2"</span><span class="p">):</span> - <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span> - - <span class="k">def</span> <span class="nf">callIt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="mi">1234</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">_called</span> <span class="o">=</span> <span class="kc">True</span> - <span class="bp">self</span><span class="o">.</span><span class="n">_callArg</span> <span class="o">=</span> <span class="n">arg</span> - -<span class="k">def</span> <span class="nf">dummyFunc</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="s2">"Scooby"</span><span class="p">):</span> - <span class="k">return</span> <span class="n">arg</span> - -<span class="n">defaultTestNameSpace</span> <span class="o">=</span> <span class="p">{</span> - <span class="s1">'aStr'</span><span class="p">:</span><span class="s1">'blarg'</span><span class="p">,</span> - <span class="s1">'anInt'</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span> - <span class="s1">'aFloat'</span><span class="p">:</span><span class="mf">1.5</span><span class="p">,</span> - <span class="s1">'aList'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'item0'</span><span class="p">,</span><span class="s1">'item1'</span><span class="p">,</span><span class="s1">'item2'</span><span class="p">],</span> - <span class="s1">'aDict'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'one'</span><span class="p">:</span><span class="s1">'item1'</span><span class="p">,</span> - <span class="s1">'two'</span><span class="p">:</span><span class="s1">'item2'</span><span class="p">,</span> - <span class="s1">'nestedDict'</span><span class="p">:{</span><span class="mi">1</span><span class="p">:</span><span class="s1">'nestedItem1'</span><span class="p">,</span> - <span class="s1">'two'</span><span class="p">:</span><span class="s1">'nestedItem2'</span> - <span class="p">},</span> - <span class="s1">'nestedFunc'</span><span class="p">:</span><span class="n">dummyFunc</span><span class="p">,</span> - <span class="p">},</span> - <span class="s1">'aFunc'</span><span class="p">:</span> <span class="n">dummyFunc</span><span class="p">,</span> - <span class="s1">'anObj'</span><span class="p">:</span> <span class="n">DummyClass</span><span class="p">(),</span> - <span class="s1">'aMeth'</span><span class="p">:</span> <span class="n">DummyClass</span><span class="p">()</span><span class="o">.</span><span class="n">meth1</span><span class="p">,</span> - <span class="s1">'_'</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="s1">'translated '</span> <span class="o">+</span> <span class="n">x</span> -<span class="p">}</span> - -<span class="nb">print</span> <span class="n">ComplexExample</span><span class="p">(</span> <span class="n">searchList</span><span class="o">=</span><span class="p">[</span><span class="n">defaultTestNameSpace</span><span class="p">]</span> <span class="p">)</span> -</pre></div> -</div> -<p>Here’s the output:</p> -<div class="highlight-default"><div class="highlight"><pre><span></span>1 placeholder: blarg -2 placeholders: blarg 1 -2 placeholders, back-to-back: blarg1 -1 placeholder enclosed in {}: blarg -1 escaped placeholder: $var -func placeholder - with (): Scooby -func placeholder - with (int): 1234 -func placeholder - with (string): aoeu -func placeholder - with ('''\nstring'\n'''): -aoeu' - -func placeholder - with (string*int): aoeuaoeu -func placeholder - with (int*float): 4.0 -Python builtin values: 1 0 -func placeholder - with ($arg=float): 4.0 -deeply nested argstring: 1: -function with None: -autocalling: Scooby! Scooby. -nested autocalling: Scooby. -list subscription: item0 -list slicing: ['item0', 'item1'] -list slicing and subcription combined: item0 -dict - NameMapper style: item1 -dict - Python style: item1 -dict combined with autocalled string method: ITEM1 -dict combined with string method: ITEM1 -nested dict - NameMapper style: nestedItem2 -nested dict - Python style: nestedItem2 -nested dict - alternating style: nestedItem2 -nested dict - NameMapper style + method: NESTEDITEM2 -nested dict - alternating style + method: NESTEDITEM2 -nested dict - NameMapper style + method + slice: NEST -nested dict - Python style, variable key: nestedItem2 -object method: doo -object method + complex slice: do -very complex slice: do -translated a call to gettext -</pre></div> -</div> -<p>And here - tada! - is the generated module. To save space, I’ve -included only the lines containing the {write} calls. The rest of -the module is the same as in the first example, chapter -pyModules.example. I’ve split some of the lines to make them fit on -the page.</p> -<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="n">write</span><span class="p">(</span><span class="s1">'1 placeholder: '</span><span class="p">)</span> - <span class="mi">2</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aStr"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$aStr' at line 1, col 16.</span> - <span class="mi">3</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">2 placeholders: '</span><span class="p">)</span> - <span class="mi">4</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aStr"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$aStr' at line 2, col 17.</span> - <span class="mi">5</span> <span class="n">write</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span> - <span class="mi">6</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anInt"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> - <span class="c1"># generated from '$anInt' at line 2, col 23.</span> - <span class="mi">7</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">2 placeholders, back-to-back: '</span><span class="p">)</span> - <span class="mi">8</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aStr"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$aStr' at line 3, col 31.</span> - <span class="mi">9</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anInt"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> - <span class="c1"># generated from '$anInt' at line 3, col 36.</span> -<span class="mi">10</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">1 placeholder enclosed in </span><span class="si">{}</span><span class="s1">: '</span><span class="p">)</span> -<span class="mi">11</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aStr"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '${aStr}' at line 4,</span> - <span class="c1"># col 31.</span> -<span class="mi">12</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">1 escaped placeholder: $var</span><span class="se">\n</span><span class="s1">func placeholder - with (): '</span><span class="p">)</span> -<span class="mi">13</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from '$aFunc()' at line 6,</span> - <span class="c1"># col 29.</span> -<span class="mi">14</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">func placeholder - with (int): '</span><span class="p">)</span> -<span class="mi">15</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">1234</span><span class="p">)))</span> <span class="c1"># generated from '$aFunc(1234)' at</span> - <span class="c1"># line 7, col 32.</span> -<span class="mi">16</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">func placeholder - with (string): '</span><span class="p">)</span> -<span class="mi">17</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">'aoeu'</span><span class="p">)))</span> <span class="c1"># generated from "$aFunc('aoeu')"</span> - <span class="c1"># at line 8, col 35.</span> -<span class="mi">18</span> <span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">func placeholder - with ('''</span><span class="se">\\</span><span class="s2">nstring'</span><span class="se">\\</span><span class="s2">n'''): "</span><span class="p">)</span> -<span class="mi">19</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">'''</span><span class="se">\n</span><span class="s1">aoeu'</span><span class="se">\n</span><span class="s1">'''</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># "$aFunc('''\\naoeu'\\n''')" at line 9, col 46.</span> -<span class="mi">20</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">func placeholder - with (string*int): '</span><span class="p">)</span> -<span class="mi">21</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">'aoeu'</span><span class="o">*</span><span class="mi">2</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># "$aFunc('aoeu'*2)" at line 10, col 39.</span> -<span class="mi">22</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">func placeholder - with (int*float): '</span><span class="p">)</span> -<span class="mi">23</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="o">*</span><span class="mf">2.0</span><span class="p">)))</span> <span class="c1"># generated from '$aFunc(2*2.0)'</span> - <span class="c1"># at line 11, col 38.</span> -<span class="mi">24</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Python builtin values: '</span><span class="p">)</span> -<span class="mi">25</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">None</span><span class="p">))</span> <span class="c1"># generated from '$None' at line 12, col 24.</span> -<span class="mi">26</span> <span class="n">write</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span> -<span class="mi">27</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">True</span><span class="p">))</span> <span class="c1"># generated from '$True' at line 12, col 30.</span> -<span class="mi">28</span> <span class="n">write</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span> -<span class="mi">29</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">False</span><span class="p">))</span> <span class="c1"># generated from '$False' at line 12, col 36.</span> -<span class="mi">30</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">func placeholder - with ($arg=float): '</span><span class="p">)</span> -<span class="mi">31</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="n">arg</span><span class="o">=</span><span class="mf">4.0</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aFunc($arg=4.0)' at line 13, col 40.</span> -<span class="mi">32</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">deeply nested argstring: '</span><span class="p">)</span> -<span class="mi">33</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span> - <span class="n">arg</span> <span class="o">=</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aMeth"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span> <span class="n">arg</span> <span class="o">=</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">)</span> <span class="p">)))</span> - <span class="c1"># generated from '$aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) )'</span> - <span class="c1"># at line 14, col 26.</span> -<span class="mi">34</span> <span class="n">write</span><span class="p">(</span><span class="s1">':</span><span class="se">\n</span><span class="s1">function with None: '</span><span class="p">)</span> -<span class="mi">35</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="kc">None</span><span class="p">)))</span> <span class="c1"># generated from '$aFunc(None)' at</span> - <span class="c1"># line 15, col 21.</span> -<span class="mi">36</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">autocalling: '</span><span class="p">)</span> -<span class="mi">37</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$aFunc' at line 16,</span> - <span class="c1"># col 14.</span> -<span class="mi">38</span> <span class="n">write</span><span class="p">(</span><span class="s1">'! '</span><span class="p">)</span> -<span class="mi">39</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from '$aFunc()' at line 16,</span> - <span class="c1"># col 22.</span> -</pre></div> -</div> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">40</span> <span class="n">write</span><span class="p">(</span><span class="s1">'.</span><span class="se">\n</span><span class="s1">nested autocalling: '</span><span class="p">)</span> -<span class="mi">41</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aFunc"</span><span class="p">,</span><span class="mi">1</span><span class="p">))))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aFunc($aFunc)' at line 17, col 21.</span> -<span class="mi">42</span> <span class="n">write</span><span class="p">(</span><span class="s1">'.</span><span class="se">\n</span><span class="s1">list subscription: '</span><span class="p">)</span> -<span class="mi">43</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aList"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]))</span> <span class="c1"># generated from '$aList[0]' at line</span> - <span class="c1"># 18, col 20.</span> -<span class="mi">44</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">list slicing: '</span><span class="p">)</span> -<span class="mi">45</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aList"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># generated from '$aList[:2]' at</span> - <span class="c1"># line 19, col 15.</span> -<span class="mi">46</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">list slicing and subcription combined: '</span><span class="p">)</span> -<span class="mi">47</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aList"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span> <span class="c1"># generated from '$aList[:2][0]'</span> - <span class="c1"># at line 20, col 40.</span> -<span class="mi">48</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">dict - NameMapper style: '</span><span class="p">)</span> -<span class="mi">49</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.one"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$aDict.one' at line</span> - <span class="c1"># 21, col 26.</span> -<span class="mi">50</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">dict - Python style: '</span><span class="p">)</span> -<span class="mi">51</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">'one'</span><span class="p">]))</span> <span class="c1"># generated from "$aDict['one']"</span> - <span class="c1"># at line 22, col 22.</span> -<span class="mi">52</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">dict combined with autocalled string method: '</span><span class="p">)</span> -<span class="mi">53</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.one.upper"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aDict.one.upper' at line 23, col 46.</span> -<span class="mi">54</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">dict combined with string method: '</span><span class="p">)</span> -<span class="mi">55</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.one"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"upper"</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aDict.one.upper()' at line 24, col 35.</span> -<span class="mi">56</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style: '</span><span class="p">)</span> -<span class="mi">57</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.nestedDict.two"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aDict.nestedDict.two' at line 25, col 33.</span> -<span class="mi">58</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - Python style: '</span><span class="p">)</span> -<span class="mi">59</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">'nestedDict'</span><span class="p">][</span><span class="s1">'two'</span><span class="p">]))</span> <span class="c1"># generated from</span> - <span class="c1"># "$aDict['nestedDict']['two']" at line 26, col 29.</span> -<span class="mi">60</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - alternating style: '</span><span class="p">)</span> -<span class="mi">61</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">'nestedDict'</span><span class="p">],</span><span class="s2">"two"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated</span> - <span class="c1"># from "$aDict['nestedDict'].two" at line 27, col 34.</span> -<span class="mi">62</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style + method: '</span><span class="p">)</span> -<span class="mi">63</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.nestedDict.two.upper"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span> - <span class="c1"># '$aDict.nestedDict.two.upper' at line 28, col 42.</span> -<span class="mi">64</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - alternating style + method: '</span><span class="p">)</span> -<span class="mi">65</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">'nestedDict'</span><span class="p">],</span><span class="s2">"two.upper"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> - <span class="c1"># generated from "$aDict['nestedDict'].two.upper" at line 29, col 43.</span> -<span class="mi">66</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style + method + slice: '</span><span class="p">)</span> -</pre></div> -</div> -<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">67</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict.nestedDict.two"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"upper"</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">4</span><span class="p">]))</span> - <span class="c1"># generated from '$aDict.nestedDict.two.upper[:4]' at line 30, col 50.</span> -<span class="mi">68</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">nested dict - Python style, variable key: '</span><span class="p">)</span> -<span class="mi">69</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"aDict"</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> - <span class="p">[</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"meth"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">'nestedDict'</span><span class="p">)],</span><span class="s2">"two"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> - <span class="c1"># generated from "$aDict[$anObj.meth('nestedDict')].two" at line 31,</span> - <span class="c1"># col 43.</span> -<span class="mi">70</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">object method: '</span><span class="p">)</span> -<span class="mi">71</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj.meth1"</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from '$anObj.meth1' at</span> - <span class="c1"># line 32, col 16.</span> -<span class="mi">72</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">object method + complex slice: '</span><span class="p">)</span> -<span class="mi">73</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"meth1"</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> - <span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="p">((</span><span class="mi">4</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"meth1"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span> <span class="p">]))</span> - <span class="c1"># generated from '$anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]'</span> - <span class="c1"># at line 33, col 32.</span> -<span class="mi">74</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">very complex slice: '</span><span class="p">)</span> -<span class="mi">75</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"meth1"</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> - <span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="p">((</span><span class="mi">4</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"anObj"</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">"meth1"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span> <span class="p">]</span> <span class="p">))</span> - <span class="c1"># generated from '$( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] )'</span> - <span class="c1"># at line 34, col 21.</span> -<span class="mi">76</span> <span class="k">if</span> <span class="kc">False</span><span class="p">:</span> -<span class="mi">77</span> <span class="n">_</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span> -<span class="mi">78</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">"_"</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s2">"a call to gettext"</span><span class="p">)))</span> - <span class="c1"># generated from "$_('a call to gettext')"</span> - <span class="c1"># at line 35, col 1.</span> -<span class="mi">79</span> <span class="n">write</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> -</pre></div> -</div> -<p>For each placeholder lookup, the the innermost level of nesting is -a {VFS} call, which looks up the first (leftmost) placeholder -component in the searchList. This is wrapped by zero or more {VFN} -calls, which perform Universal Dotted Notation lookup on the next -dotted component of the placeholder, looking for an attribute or -key by that name within the previous object (not in the -searchList). Autocalling is performed by {VFS} and {VFN}: that’s -the reason for their third argument.</p> -<p>Explicit function/method arguments, subscripts and keys (which are -all expressions) are left unchanged, besides expanding any embedded -$placeholders in them. This means they must result in valid Python -expressions, following the standard Python quoting rules.</p> -<p>Built-in Python values ({None}, {True} and {False}) are converted -to {filter(None)}, etc. They use normal Python variable lookup -rather than {VFS}. (Cheetah emulates {True} and {False} using -global variables for Python < 2.2.1, when they weren’t builtins -yet.)</p> -<p>Notice the last line is a call to {_} (i.e. {gettext}) which is -used for internationalization (see -<a class="reference external" href="http://docs.python.org/lib/module-gettext.html">http://docs.python.org/lib/module-gettext.html</a>). The code is -converted normally, but an {if False} block is used so that gettext -can successfully mark the string for translation when parsing the -generated Python. Otherwise, the NameMapper syntax would get in the -way of this.</p> -</div> -</div> - - - </div> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related" role="navigation" aria-label="related navigation"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="../genindex.html" title="General Index" - >index</a></li> - <li class="right" > - <a href="../py-modindex.html" title="Python Module Index" - >modules</a> |</li> - <li class="right" > - <a href="patching.html" title="Patching Cheetah" - >next</a> |</li> - <li class="right" > - <a href="errorHandling.html" title="Directives: Error Handling" - >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> »</li> - <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> »</li> - </ul> - </div> - <div class="footer" role="contentinfo"> - © Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team.. - Last updated on Mar 03, 2018. - Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5. - </div> - </body> -</html>
\ No newline at end of file |