diff options
Diffstat (limited to 'docs/html/_sources/recipes/inheritance.rst.txt')
-rw-r--r-- | docs/html/_sources/recipes/inheritance.rst.txt | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/docs/html/_sources/recipes/inheritance.rst.txt b/docs/html/_sources/recipes/inheritance.rst.txt new file mode 100644 index 0000000..267fa1f --- /dev/null +++ b/docs/html/_sources/recipes/inheritance.rst.txt @@ -0,0 +1,62 @@ +Basic Inheritance +================= + +Introduction +------------ +Cheetah, like Python, is an object-oriented language if you so choose to +use it in that fashion. That is to say that you can use Cheetah in with +object-oriented principles *or* you can use Cheetah in a strictly functional +sense, like Python, Cheetah does not place restrictions on these barriers. + +While Cheetah is not strictly Python, it was designed as such to interoperate, +particularly with the notion of classes, with Python itself. In effect you can +define Python classes that inherit and extend from Cheetah-derived classes and +vice versa. For this, Cheetah defines a few **directives** (denoted with the `\#` +hash-mark) that are of some help, the most important one being the `\#extends` +directive, with others playing important roles like `\#import`, `\#attr` and `\#super` + +In this recipe/tutorial I intend to explain and define a few key inheritance +patterns with Cheetah, being: + +* A Cheetah Template inheriting from Python +* Python inheriting from a Cheetah Template +* Cheetah Templates and "*mixins*" + +This document also operates on the assumption that the reader is at least +somewhat familiar with the basic tenets of object-oriented programming in +Python. + + +Cheetah inheriting from Python +------------------------------ +Whether or not you are aware of it, Cheetah templates are always inheriting from +a Python class by default. Unless otherwise denoted, Cheetah templates are compiled +to Python classes that subclass from the `Cheetah.Template.Template` class. + +What if you would like to introduce your own Template base class? Easily acheived by +defining your own Template class in a Python module, for example:: + + import Cheetah.Template + + class CookbookTemplate(Cheetah.Template.Template): + _page = 'Cookbook' + author = 'R. Tyler Ballance' + def pageName(self): + return self._page or 'Unknown' + +**Figure 1. cookbook.py** + +For this example, I want all my subclasses of the `CookbookTemplate` to define a +page author which will be used in some shared rendering code, to accomplish this +my templates will need to subclass from `CookbookTemplate` explicitly instead of +implicitly subclassing from `Cheetah.Template.Template`:: + + #import cookbook + #extends cookbook.CookbookTemplate + #attr author = 'Tavis Rudd' + + ## The rest of my recipe template would be below + +**Figure 2. recipe1.tmpl** + + |