summaryrefslogtreecommitdiff
path: root/docs/users_guide_2_src/03_gettingStarted.txt
blob: 6e447c2421a3ea3a9ca214bf84af22987b7b6a31 (plain)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
Getting Started
========================================

..
    :label: gettingStarted


Requirements
----------------------------------------

..
    :label: gettingStarted.requirements

Cheetah requires Python release 2.2 or newer, and has been tested with all
versions through 2.4.2.  It should run everywhere Python runs, and has been
tested on Linux, Windows NT/98/XP, FreeBSD, Solaris, and Mac OS X.

99% of Cheetah is written in Python.  There is one small C module
(``_namemapper.so``) for speed, but Cheetah automatically falls back to a
Python equivalent (``NameMapper.py``) if the C module is not available.


Installation
----------------------------------------

..
    :label: gettingStarted.install

If you have ``easy_install``
(http://peak.telecommunity.com/DevCenter/EasyInstall) set up, this command will
download and install the latest version of Cheetah as a Python Egg
(http://peak.telecommunity.com/DevCenter/PythonEggs)::

    # easy_install Cheetah

Or from an already-downloaded tarball::

    # easy_install Cheetah-2.0.tar.gz

Or from an unpacked source directory or CVS sandbox::

    # easy_install .

If you don't have ``easy_install``, you'll have to install Cheetah manually::

    # tar xzvf Cheetah-2.0.tar.gz
    # cd Cheetah-2.0
    # python setup.py install

You can also specify non-default locations::

    # python setup.py install --install-lib=/home/tavis/python
    # python setup.py install --home=/home/tavis
    # python setup.py install --help

.. tip::

    If you install Cheetah manually and then install an egg that depends on
    Cheetah (like TurboCheetah_), ``easy_install`` may *reinstall*
    Cheetah as an egg.  This leaves two copies of Cheetah on your system,
    possibly different versions.  Python will use whichever version comes
    first in the Python path.  To avoid this, use ``easy_install``'s
    **--no-deps** option or delete the copy you don't wish to use.


Uninstalling
----------------------------------------

..
    :label: gettingstarted.uninstalling

To uninstall Cheetah: 

1. Delete the "cheetah" program
from whichever bin/ directory it was put in (perhaps /usr/local/bin/).  

2. If Cheetah was installed as an egg, delete the egg directory
(e.g., /usr/local/lib/python2.4/site-packages/Cheetah-2.0-py2.4.egg/), and
remove the "Cheetah" line in **easy-install.pth** in the same directory.  

3. If Cheetah was not installed as an egg, delete the package directory
(e.g., /usr/local/lib/python2.4/site-packages/Cheetah/).


The 'cheetah' command
----------------------------------------

..
    :label: gettingStarted.cheetah

Cheetah comes with a utility "cheetah" that provides a command-line
interface to various housekeeping tasks.  The command's first argument is
the name of the task.  The following commands are currently supported::

    cheetah compile [options] [FILES ...]     : Compile template definitions
    cheetah fill [options] [FILES ...]        : Fill template definitions
    cheetah help                              : Print this help message
    cheetah options                           : Print options help message
    cheetah test                              : Run Cheetah's regression tests
    cheetah version                           : Print Cheetah version number

You only have to type the first letter of the command:
``cheetah c`` is the same as ``cheetah compile``.

The test suite is described in the next section.  The ``compile``
command in section \ref{howWorks.cheetah-compile}, 
and the ``fill`` command in section \ref{howWorks.cheetah-fill}.


Testing your installation
----------------------------------------

..
    :label: gettingStarted.test

After installing Cheetah, you can run its self-test routine to verify it's
working properly on your system.  First cd to to any directory you have write
permission in (the tests write temporary files) *except* the unpacked Cheetah
source directory (it might produce spurious errors).  Type the following at the
command prompt::

    $ cheetah test 

The tests will run for about three minutes and print a success/failure
message.  If the tests pass, start Python in interactive mode and try the
example in the next section.

Sometimes the CheetahWrapper tests fail on Windows because they can't execute 
"cheetah" via ``os.system()``.  Ignore these; you won't be doing this when
you use Cheetah.

If any other tests fail, please send a message to the e-mail list with a copy
of the test output and the following details about your installation:

* your version of Cheetah
* your version of Python
* your operating system
* whether you have changed anything in the Cheetah installation



Quickstart tutorial
----------------------------------------

..
    :label: gettingStarted.tutorial

This tutorial briefly introduces how to use Cheetah from the Python prompt.
The following chapters will discuss other ways to use templates and more of
Cheetah's features.

The core of Cheetah is the ``Template`` class in the ``Cheetah.Template``
module. The following example shows how to use the ``Template`` class in an
interactive Python session. ``t`` is the Template instance.  Lines prefixed
with ``>>>`` and ``...`` are user input.  The remaining lines are Python
output. ::

    >>> from Cheetah.Template import Template
    >>> templateDef = """
    ... <HTML>
    ... <HEAD><TITLE>$title</TITLE></HEAD>
    ... <BODY>
    ... $contents
    ... ## this is a single-line Cheetah comment and won't appear in the output
    ... #* This is a multi-line comment and won't appear in the output
    ...    blah, blah, blah 
    ... *#
    ... </BODY>
    ... </HTML>"""
    >>> namespace = {'title': 'Hello World Example', 'contents': 'Hello World!'}
    >>> t = Template(templateDef, namespaces=[namespace])
    >>> print t
     
    <HTML>
    <HEAD><TITLE>Hello World Example</TITLE></HEAD>
    <BODY>
    Hello World!
    </BODY>
    </HTML>
    >>> print t    # print it as many times as you want
          [ ... same output as above ... ]
    >>> namespace['title'] = 'Example #2'
    >>> namespace['contents'] = 'Hiya Planet Earth!'
    >>> print t   # Now with different plug-in values.
    <HTML>
    <HEAD><TITLE>Example #2</TITLE></HEAD>
    <BODY>
    Hiya Planet Earth!
    </BODY>
    </HTML>

Because Cheetah is extremely flexible, you can achieve the same result this
way::  

    >>> t2 = Template(templateDef)
    >>> t2.title = 'Hello World Example!'
    >>> t2.contents = 'Hello World'
    >>> print t2
          [ ... same output as the first example above ... ]
    >>> t2.title = 'Example #2'
    >>> t2.contents = 'Hello World!'
    >>> print t2
         [ ... same as Example #2 above ... ]

Or the values can be extracted from an object's attributes.

    >>> myInstance.title
    'Hello World Example!'
    >>> myInstance.contents = 'Hello World!'
    >>> t2 = Template(templateDef, namespaces=[myInstance])

The template will search your namespaces in order, then its own ``self``
attributes, until it finds a match.  The template definition can also 
come from a file rather than a string.

Let's look at the ``Template`` constructor again::

    t = Template(templateDef, namespaces=[namespace])

This does more than it appears.  It compiles the template definition into a
template class, a subclass of ``Template``, and instantiates it.  Sometimes
it's desirable to separate these operations, and the ``.compile`` class method
does this::

    tclass = Template.compile(templateDef)
    t = tclass(namespaces=[namespace])

The first line compiles the template class; the second line instantiates it.
You can also do this on one line::

    t = Template.compile(templateDef)(namespaces=[namespace])

You can use either ``Template()`` or ``Template.compile()`` in your programs,
but you should learn both styles so you'll recognize them in other people's
code.

This is all fine for short templates, but for long templates or for an
application that depends on many templates, it's easier to store the templates
in separate \*.tmpl files and use the **cheetah** program to compile
them into Python modules.  This will be covered in section
\ref{howWorks.cheetah-compile}.  Here's how you use a precompiled template::

    >>> from MyPrecompiledTemplate import MyPrecompiledTemplate
    >>> t = MyPrecompiledTemplate()
    >>> t.name = "Fred Flintstone"
    >>> t.city = "Bedrock City"
    >>> print t

Or::

    >>> from MyPrecompiledTemplate import MyPrecompiledTemplate
    >>> namespace = {"name": "Fred Flintstone", "city": "Bedrock City"}
    >>> t = MyPrecompiledTemplate(namespaces=[namespace])
    >>> print t

For the minimalists out there, here's a template compilation,
instantiation and filling all in one Python statement::

    >>> print Template("Templates are pretty useless without placeholders.")
    Templates are useless without placeholders.

.. _TurboCheetah:  http://python.org/pypi/TurboCheetah/