summaryrefslogtreecommitdiff
path: root/docs/html/_sources/recipes/inheritance.rst.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html/_sources/recipes/inheritance.rst.txt')
-rw-r--r--docs/html/_sources/recipes/inheritance.rst.txt62
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**
+
+