1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
@staticmethod and @classmethod
==============================
Refer the Python's documentation if you're unfamiliar with either
`@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_ or
`@classmethod <http://docs.python.org/library/functions.html#classmethod>`_ and their uses in Python, as they
pertain to their uses in Cheetah as well. Using `@staticmethod <http://docs.python.org/library/functions.html#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
© 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
© CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
#end def
**Figure 1.1, util.tmpl**
With the addition of the `@staticmethod <http://docs.python.org/library/functions.html#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 <http://docs.python.org/library/functions.html#staticmethod>`_ and `@classmethod <http://docs.python.org/library/functions.html#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 <http://docs.python.org/library/functions.html#staticmethod>`_/`@classmethod <http://docs.python.org/library/functions.html#classmethod>`_ are quite useful for the little snippets
of markup, etc that are needed (Google AdSense blocks, footers,
banners, etc).
|