summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@slide.com>2009-05-31 18:48:31 -0700
committerR. Tyler Ballance <tyler@slide.com>2009-05-31 18:48:31 -0700
commit66ea7ff841c5142053277733f92e9c3527aa7144 (patch)
tree93ad04ef45cb39ee748e5248fa2c7412e1e07432
parent77afcbb4b482cc9b0af27d19257237f2d7d088b8 (diff)
downloadpython-cheetah-66ea7ff841c5142053277733f92e9c3527aa7144.tar.gz
Add the @staticmethod and @classmethod recipe
Signed-off-by: R. Tyler Ballance <tyler@slide.com>
-rw-r--r--recipes/content/@staticmethod_and_@classmethod.html436
-rw-r--r--recipes/content/@staticmethod_and_@classmethod.markdown52
-rw-r--r--recipes/content/Basic_Inheritance.html2
-rw-r--r--recipes/content/Precompiled_Templates.html2
-rw-r--r--recipes/content/Writing_A_Recipe.html2
-rw-r--r--recipes/index.html1
6 files changed, 492 insertions, 3 deletions
diff --git a/recipes/content/@staticmethod_and_@classmethod.html b/recipes/content/@staticmethod_and_@classmethod.html
new file mode 100644
index 0000000..30e622e
--- /dev/null
+++ b/recipes/content/@staticmethod_and_@classmethod.html
@@ -0,0 +1,436 @@
+
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
+<html>
+ <head>
+ <title>Community Cheetah - The Python-Powered Template Engine - @staticmethod_and_@classmethod</title>
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
+ <meta name="keywords" content="cheetah, template engine, python, community cheetah, templating, markdown, markup, mod_python, webware"/>
+ <meta name="googlebot" content="index, follow" />
+ <meta name="language" content="en-us, english" />
+ </head>
+ <body>
+ <style type="text/css">
+ <!--
+ /* This CSS style sheet was developed by www.studio7designs.com for opensourcetemplates.org ... Please email if you have any questions aran@studio7designs.com Have fun! */
+
+
+body {
+background:#ffffff url('../../images/bg.jpg') top center repeat-x;
+margin:10px 10px 0px 10px;
+padding:0px;
+color: #000;
+font-family:"Trebuchet MS",arial,sans-serif;
+font-size: 80%;
+
+}
+
+body a:link, body a:visited {
+ color: blue;
+}
+
+#blogtitle{
+width:100%;
+margin:0px auto;
+padding:0 0 5px 0;
+font-size:1.1em;
+line-height:1.2em;
+}
+
+#blogtitle a:link, a:visited {
+ color:#b8ce83;
+ text-decoration:none;
+}
+
+#blogtitle a:hover, a:active {
+ color:#fff;
+ text-decoration:none;
+}
+
+#small{
+positon:relative;
+padding-left: 5px;
+
+}
+
+#small2{
+positon:relative;
+float:right;
+margin-top: -15px;
+
+}
+
+UL.BLUE {
+list-style: url(../../images/bullet.jpg) disc;
+font-size: 1.1em;
+
+}
+
+#leftcontent {
+position: absolute;
+left:10px;
+top:50px;
+width:200px;
+margin-top: 116px;
+background-image:url("../../images/strips_onside.jpg");
+background-repeat:repeat-y;
+font-size:1.0em;
+padding-left: 12px;
+padding-top: 8px;
+
+}
+
+#leftcontent p{padding-right:10px; margin-left: 5px; color:#888; font-size:1em;}
+
+#centercontent {
+margin-top: 37px;
+background:#fff;
+margin-left: 199px;
+margin-right:199px;
+color:#000;
+voice-family: "\"}\"";
+voice-family: inherit;
+margin-left: 201px;
+margin-right:201px;
+padding:20px;
+font-size: 1.3em;
+}
+
+#centercontent p {color:#000;}
+
+html>body #centercontent {
+margin-left: 201px;
+margin-right:201px;
+
+}
+
+.centercontentleft {float:left; width:40%; height:200px; background-color:#fff; text-align:left;
+border:dashed 2px #ccc; margin: 4px 10px 5px 10px; padding:6px; font-size:1.1em; color:#666666;}
+
+.centercontentright {float:right; width:30%; height:100px; background-color:#fff; text-align:left;
+border:dashed 2px #ccc; margin: 4px 10px 5px 10px; padding:6px; font-size:1.1em; color:#666666;}
+
+
+#rightcontent {
+position: absolute;
+right:10px;
+top:0px;
+width: 200px;
+font-size:1.1em;
+background-image:url("../../images/strips_onside.jpg");
+background-repeat:repeat-y;
+margin-top:150px;
+padding-left: 5px;
+padding-right: 8px;
+padding-top: 8px;
+}
+
+#rightcontent p {color:#888;}
+
+#banner {
+background:#fff;
+height:40px;
+voice-family: "\"}\"";
+voice-family: inherit;
+height:39px;
+
+}
+
+html>body #banner {
+height:39px;
+
+}
+
+p,h1,pre {
+margin:0px 10px 10px 10px;
+font:Arial, Helvetica, sans-serif;
+font-size:12px;
+line-height: 1.6em;
+text-align:justify;
+text-decoration:none;
+}
+
+h1 {
+font-size:2.5em;
+float:right;
+color:#ccc;
+padding-top:15px;
+
+}
+
+h3 {
+font-size:14px;
+color:#999;
+
+}
+
+#banner h1 {
+font-size:14px;
+padding:10px 10px 0px 10px;
+margin:0px;
+
+}
+
+#rightcontent p {
+font-size:11px
+
+}
+
+.introduction ul, #introduction li {
+text-align:center;
+list-style: none;
+margin: 0;
+padding: 0;
+
+}
+
+.introduction h3{
+text-align: center;
+position:static;
+
+}
+
+
+/* ~~~~~~~~~ PROPS FOR THE MENU GO OUT TO EXPLODING-BOY.COM ~~~~~~~~~ */
+
+#topmenu {
+position: absolute;
+top: 45px;
+left: 240px;
+width: 600px;
+font-size:100%;
+margin: 0 0 50px 0;;
+line-height:normal;
+height: 35px;
+}
+#topmenu ul {
+margin:0;
+padding:0px 0px 0 0px;
+list-style:none;
+}
+#topmenu li {
+display:inline;
+margin:0;
+padding:0;
+}
+#topmenu a {
+float:left;
+background:url(../../images/menuleft.gif) no-repeat left top;
+margin:0;
+padding:0 0 0 4px;
+text-decoration:none;
+}
+#topmenu a span, a:visited span {
+float:left;
+display:block;
+background:url(../../images/menuright.gif) no-repeat right top;
+padding:5px 15px 4px 6px;
+color:#888;
+}
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+#topmenu a span {float:none;}
+/* End IE5-Mac hack */
+#topmenu a:hover span {
+color:#999999;
+}
+#topmenu a:hover {
+background-position:0% -42px;
+}
+#topmenu a:hover span {
+background-position:100% -42px;
+}
+
+/* ~~~~~~~~~ END MENU ~~~~~~~~~ */
+
+
+
+/* ~~~~~~~~~ BEGIN FOOTER ~~~~~~~~~ */
+
+#footer{
+/*height:329px;*/
+background:#000 url('../../images/bg.jpg') top center repeat-x;
+text-align: center;
+padding-top: 8px;
+clear: both;
+float: none;
+margin-left: -10px;
+margin-right: -10px;
+margin-bottom: -20px;
+
+}
+
+#footer a, a:link {
+color:#999999;
+text-decoration: none;
+
+}
+#footer a:hover {
+color:#A5CE77;
+text-decoration: none;
+
+}
+
+/* ~~~~~~~~~ END FOOTER~~~~~~~~~ */
+
+
+/* ~~~~~~~~~ BOXES AT BOTTOM OF PAGE ~~~~~~~~~ */
+
+.centercontentleftb {float:left; width:45%; height:200px; background-color:#31412c; text-align:left;
+border:dashed 1px #888; margin: 50px 10px 5px 10px; padding:6px; font-size:1.1em; color:#fff;}
+
+
+.centercontentleftimg {float:left; width:45%; height:45%x; background-color:#31412c; text-align:left;
+border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
+
+.centercontentrightimg {float:right; width:45%; height:45%; background-color:#31412c; text-align:left;
+border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
+
+.centercontentrightb {float:right; width:45%; height:200px; background-color:#31412c; text-align:left;
+border:dashed 1px #888; margin: 50px 13px 5px 10px; padding:6px; font-size:1.1em; color:#fff;}
+
+.centercontentleftimg {float:left; width:45%; height:45%; background-color:#31412c; text-align:left;
+border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
+
+.centercontentrightimg {float:right; width:45%; height:45%; background-color:#31412c; text-align:left;
+border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
+
+ -->
+ </style>
+
+
+ <a href="http://github.com/rtyler/cheetah">
+ <img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_orange_ff7600.png" alt="Fork me on GitHub" />
+</a>
+ <div id="blogtitle">
+ <div id="small" style="margin-left: 130px;"><a href="#">Community Cheetah</a> </div>
+ <div id="small2">
+ <a href="../../index.html">Home</a>&nbsp;|&nbsp;
+ <a href="../../http://bugs.communitycheetah.org">Issues</a>&nbsp;|&nbsp;
+ <a href="../../http://github.com/rtyler/cheetah/tree/master">Source</a>&nbsp;|&nbsp;
+ <a href="../../roadmap.html">Roadmap</a>&nbsp;|&nbsp;
+ </div>
+ </div>
+
+ <div id="topmenu">
+ <ul class="BLUE">
+ <li>
+ <a href="../../index.html" title="Home">
+ <span>Home</span>
+ </a>
+ </li>
+ <li>
+ <a href="../../download.html" title="Download">
+ <span>Download</span>
+ </a>
+ </li>
+ <li>
+ <a href="../../docs.html" title="Documentation">
+ <span>Documentation</span>
+ </a>
+ </li>
+ <li>
+ <a href="../../recipes/" title="Recipes">
+ <span>Recipes</span>
+ </a>
+ </li>
+ <li>
+ <a href="../../community.html" title="Community">
+ <span>Community</span>
+ </a>
+ </li>
+ <li>
+ <a href="../../developers.html" title="Developers">
+ <span>Developers</span>
+ </a>
+ </li>
+ </ul>
+ </div>
+
+
+
+ <div id="centercontent">
+ <h1>@staticmethod and @classmethod</h1>
+<p>Refer the Python's documentation if you're unfamiliar with either
+<a href="http://docs.python.org/library/functions.html#staticmethod">@staticmethod</a> or <a href="http://docs.python.org/library/functions.html#classmethod">@classmethod</a> and their uses in Python, as they
+pertain to their uses in Cheetah as well. Using <a href="http://docs.python.org/library/functions.html#staticmethod">@staticmethod</a> it's
+trivial to create <em>utility templates</em> which are common when using
+Cheetah for web development. These <em>utility templates</em> might contain
+a number of small functions which generate useful snippets of markup.</p>
+<p>For example:</p>
+<pre><code>#def copyright()
+ #import time
+ &amp;copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
+#end def
+</code></pre>
+<p><strong>Figure 1, util.tmpl</strong></p>
+<p>Prior to version <strong>v2.2.0</strong> of Cheetah, there wasn't really an easy means
+of filling templates with bunches of these small utility functions. In
+<strong>v2.2.0</strong> however, you can decorate these methods with <code>#@staticmethod</code>
+and use "proper" Python syntax for calling them, <strong>fig 1</strong> revisited:</p>
+<pre><code>#@staticmethod
+#def copyright()
+ #import time
+ &amp;copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
+#end def
+</code></pre>
+<p><strong>Figure 1.1, util.tmpl</strong></p>
+<p>With the addition of the <a href="http://docs.python.org/library/functions.html#staticmethod">@staticmethod</a> decorator, the <code>copyright()</code>
+function can now be used without instantiating an instance of the <code>util</code>
+template class. In effect:</p>
+<pre><code>#from util import util
+
+&lt;strong&gt;This is my page&lt;/strong&gt;
+&lt;br/&gt;
+&lt;hr noshade/&gt;
+$util.copyright()
+</code></pre>
+<p><strong>Figure 2, index.tmpl</strong></p>
+<p>This approach is however no means to structure anything complex,
+<a href="http://docs.python.org/library/functions.html#staticmethod">@staticmethod</a> and <a href="http://docs.python.org/library/functions.html#classmethod">@classmethod</a> use in Cheetah is not meant as a
+replacement for properly structured class hierarchies (which
+Cheetah supports). That said if you are building a web application
+<a href="http://docs.python.org/library/functions.html#staticmethod">@staticmethod</a>/<a href="http://docs.python.org/library/functions.html#classmethod">@classmethod</a> are quite useful for the little snippets
+of markup, etc that are needed (Google AdSense blocks, footers,
+banners, etc).</p>
+<p><span style="float: right; clear: both;"><em>Last edited: Sun May 31 18:40:24 2009 </em></span></p>
+ </div>
+
+ <div id="rightcontent">
+ <img style="margin-top:-9px; margin-left: -5px;" src="../../images/top2.jpg" alt="" />
+
+ <div id="twitter_div">
+ <h2 class="sidebar-title">Twitter Updates</h2>
+ <ul id="twitter_update_list"></ul>
+
+ <a href="http://twitter.com/cheetahtemplate" id="twitter-link" style="display:block;text-align:right;">follow Cheetah on Twitter</a>
+ </div>
+
+
+ <img style="padding-top:5px; margin-left:-5px; margin-bottom:-4px;" src="../../images/specs_bottom.jpg" alt="" />
+ </div>
+
+ <br clear="all"/>
+ <br/>
+
+ <a href="http://www.python.org" target="_blank"><img src="../../images/python-logo.gif" border="0" alt="Python-powered" title="Python-powered" align="right"/></a>
+ <br clear="all"/>
+ <br/>
+ <div id="footer">
+ &copy; 2006 Design by <a href="http://www.studio7designs.com">Studio7designs.com</a>
+ </div>
+
+
+ <script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
+ <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/cheetahtemplate.json?callback=twitterCallback2&count=5"></script>
+ </body>
+</html>
+
+
+
+
+
+
+
+
diff --git a/recipes/content/@staticmethod_and_@classmethod.markdown b/recipes/content/@staticmethod_and_@classmethod.markdown
new file mode 100644
index 0000000..de2f995
--- /dev/null
+++ b/recipes/content/@staticmethod_and_@classmethod.markdown
@@ -0,0 +1,52 @@
+@staticmethod and @classmethod
+==============================
+#set $staticmethod = '[@staticmethod](http://docs.python.org/library/functions.html#staticmethod)'
+#set $classmethod = '[@classmethod](http://docs.python.org/library/functions.html#classmethod)'
+
+Refer the Python's documentation if you're unfamiliar with either
+$staticmethod or $classmethod and their uses in Python, as they
+pertain to their uses in Cheetah as well. Using $staticmethod it's
+trivial to create *utility templates* which are common when using
+Cheetah for web development. These *utility templates* might contain
+a number of small functions which generate useful snippets of markup.
+
+For example:
+
+ \#def copyright()
+ \#import time
+ &copy; CheetahCorp, Inc. \$time.strftime('%Y', time.gmtime())
+ \#end def
+**Figure 1, util.tmpl**
+
+Prior to version **v2.2.0** of Cheetah, there wasn't really an easy means
+of filling templates with bunches of these small utility functions. In
+**v2.2.0** however, you can decorate these methods with `\#@staticmethod`
+and use "proper" Python syntax for calling them, **fig 1** revisited:
+
+ \#@staticmethod
+ \#def copyright()
+ \#import time
+ &copy; CheetahCorp, Inc. \$time.strftime('%Y', time.gmtime())
+ \#end def
+**Figure 1.1, util.tmpl**
+
+With the addition of the $staticmethod decorator, the `copyright()`
+function can now be used without instantiating an instance of the `util`
+template class. In effect:
+
+ \#from util import util
+
+ <strong>This is my page</strong>
+ <br/>
+ <hr noshade/>
+ \$util.copyright()
+**Figure 2, index.tmpl**
+
+
+This approach is however no means to structure anything complex,
+$staticmethod and $classmethod use in Cheetah is not meant as a
+replacement for properly structured class hierarchies (which
+Cheetah supports). That said if you are building a web application
+$staticmethod/$classmethod are quite useful for the little snippets
+of markup, etc that are needed (Google AdSense blocks, footers,
+banners, etc).
diff --git a/recipes/content/Basic_Inheritance.html b/recipes/content/Basic_Inheritance.html
index 213263c..1331ecd 100644
--- a/recipes/content/Basic_Inheritance.html
+++ b/recipes/content/Basic_Inheritance.html
@@ -399,7 +399,7 @@ implicitly subclassing from <code>Cheetah.Template.Template</code></p>
## The rest of my recipe template would be below
</code></pre>
<p><strong>Figure 2. recipe1.tmpl</strong></p>
-<p><span style="float: right; clear: both;"><em>Last edited: Sat May 30 12:05:40 2009 </em></span></p>
+<p><span style="float: right; clear: both;"><em>Last edited: Sun May 31 18:40:24 2009 </em></span></p>
</div>
<div id="rightcontent">
diff --git a/recipes/content/Precompiled_Templates.html b/recipes/content/Precompiled_Templates.html
index 5e2c213..08ed9c2 100644
--- a/recipes/content/Precompiled_Templates.html
+++ b/recipes/content/Precompiled_Templates.html
@@ -396,7 +396,7 @@ method" for executing the Cheetah template. You can adjust the example above in
results = getattr(tmpl, mainMethod)()
</code></pre>
<p><strong>Figure 3. Dynamic runner.py</strong></p>
-<p><span style="float: right; clear: both;"><em>Last edited: Sat May 30 12:05:40 2009 </em></span></p>
+<p><span style="float: right; clear: both;"><em>Last edited: Sun May 31 18:40:24 2009 </em></span></p>
</div>
<div id="rightcontent">
diff --git a/recipes/content/Writing_A_Recipe.html b/recipes/content/Writing_A_Recipe.html
index ca30611..e78b003 100644
--- a/recipes/content/Writing_A_Recipe.html
+++ b/recipes/content/Writing_A_Recipe.html
@@ -353,7 +353,7 @@ border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
<div id="centercontent">
<h1>Writing a "Recipe"</h1>
<p>I'll fill this out soon enough :)</p>
-<p><span style="float: right; clear: both;"><em>Last edited: Sat May 30 12:05:40 2009 </em></span></p>
+<p><span style="float: right; clear: both;"><em>Last edited: Sun May 31 18:40:24 2009 </em></span></p>
</div>
<div id="rightcontent">
diff --git a/recipes/index.html b/recipes/index.html
index a7d34b6..4542cca 100644
--- a/recipes/index.html
+++ b/recipes/index.html
@@ -357,6 +357,7 @@ border:dashed 1px #888; padding:6px; font-size:1.1em; color:#fff;}
<li><a href="content/Precompiled_Templates.html">Precompiled Templates</a></li>
<li><a href="content/Writing_A_Recipe.html">Writing A Recipe</a></li>
<li><a href="content/Basic_Inheritance.html">Basic Inheritance</a></li>
+<li><a href="content/@staticmethod_and_@classmethod.html">@staticmethod and @classmethod</a></li>
</ul>
<p>If you're really hungry for some Cheetah recipies, you can check out the
out-of-date <a href="http://wiki.cheetahtemplate.org/cheetah-recipes.html">Cheetah recipes page</a>