|
Michael C. Neel
neel at mediapulse.com
Tue Jun 10 17:23:30 EST 2003
> > > <al-for iter="name" expr="keys">
> > > <tr>
> > > <td><al-value expr="name.value()"></td>
> > > <td><al-value expr="environ[name.value()]"></td>
> > > <tr>
> > > </al-for>
I think this snippet doesn't show all of albatross; it acts much closer
to ezt.py than let on here.
In albatross, edna could do something like (warning, python-style sudo
code follows; do not attempt to run this at home):
In edna.py:
class edna_pages:
def page_process(self, ctx):
#called to process a page, ctx is the object with the request data
and methods
if ctx.req_equals("show_dir"):
#the "Show Directory" button was clicked
file_list = get_files_in_dir(ctx.locals.directory) #defined
elsewhere, directory come from the broswer
results = [] #list of results, will hold mp3 objects to pass to
template
for file in file_list:
results.append(mp3(file)) # mp3 class defined elsewhere, gets
all the tag/size info
ctx.locals.results = results # place results in the namespace of
the template
def page_display(self, ctx):
# load and run the template
ctx.run_template('edna.html')
in edny.html:
<html>
<body>
<table>
<tr>
<td>Filename</td>
<td>Size</td>
<td>Length</td>
</tr>
<al-for expr="results" iter="row">
<al-exec expr="mp3 = row.value()"> <!-- I do
this for sanity, we could very easily
use row.value().field instead -->
<tr>
<td><al-value expr="mp3.filename"></td>
<td><al-value expr="mp3.size"> Kb</td>
<td><al-value expr="'%0d:%02d' %
(mp3.minutes, mp3.seconds)"></td>
</tr>
</al-for>
</table>
</body>
</html>
That's the basic idea, showing the seperation of logic and display of
Albatross. There is a lot of cool stuff to Albatross as well, for
example it could easily with a few tags break the results into 30 per
page and provide prev and next buttons, but this give you the general
idea.
Mike
|