« Overriding angle bracket escaping in ZPT | Main | PubMed records available over OAI-PMH »
December 15, 2004
Doozers in ZPT
I've been working on converting my DTML generic form builder into ZPT.
It has taken me a couple of days to move the concept of a doozer over. A doozer is a script which performs some business logic functions, such as inserting data into a table but instead of returning any resulting HTML, hands off to another URI using a redirect.
The main trick I was missing was the use of either tal:block
or the tal:omit-tag=""
attribute to ensure nothing is written to the browser before the redirect. I then discovered that this is actually unecessary as unlike PHP if you call a redirect it seems to send a new header to the browser anyway.
<div tal:define=" debug python:0; table_name request/table_name; pk_recs python:here.get_pk_column(table_name=table_name); title_column python:str(pk_recs[0]['title_column']); pk_column python:str(pk_recs[0]['pk_column']); these_items python:request.form; title_column_value python:these_items[title_column]; result python:here.insert_entry_id(table_name=table_name, title_column=title_column, this_value=title_column_value); max_id_recs python:here.get_table_max_id(table_name=table_name,pk_column=pk_column); entry_id python:max_id_recs[0]['entry_id'];" tal:omit-tag=""> <p tal:condition="python:debug == 1" tal:content="title_column" tal:omit-tag=""></p> <p tal:condition="python:debug == 1" tal:content="title_column_value" tal:omit-tag=""></p> <p tal:condition="python:debug == 1" tal:content="entry_id" tal:omit-tag=""></p> <div tal:repeat="item_key python:these_items.keys()" tal:omit-tag=""> <p tal:define="item_value python:these_items[item_key];" tal:omit-tag=""> <span tal:condition="python:debug == 1" tal:omit-tag=""> <span tal:condition="python:debug == 1" tal:content="item_key" tal:omit-tag=""></span> <span tal:condition="python:debug == 1" tal:content="item_value | nothing" tal:omit-tag="">Item here< /span> </span> <span tal:condition="python:item_key != 'table_name' and item_key != 'redirect_url'" tal:omit-tag=""> <br tal:define="result python:here.update_entry(table_name=table_name,pk_column=pk_column, this_key=item_key,this_value=item_value,entry_id=entry_id)" tal:omit-tag=""/> </span> </p> </div> <p tal:condition="python:debug == 1" tal:content="these_items" tal:omit-tag=""></p> <div tal:condition="python:not request.has_key('redirect_url')" tal:omit-tag=""> <br tal:omit-tag="" tal:define=" redirect_url python:'/generic_form_zpt/show_entry?entry_id=' + str(entry_id) + '&table_name=' + table_name + '&pk_column=' + pk_column + '&title_column=' + title_column; redirect python:request.RESPONSE.redirect(redirect_url); "/> </div> <div tal:condition="python:request.has_key('redirect_url')" tal:omit-tag=""> <br tal:omit-tag="" tal:define=" final_url python:request['redirect_url'] + '?entry_id=' + str(entry_id) + '&table_name=' + table_name + '&pk_column=' + pk_column + '&title_column=' + title_column; redirect python:request.RESPONSE.redirect(final_url); "/> </div> </div>
Tags: ZPT
Posted by pj at December 15, 2004 04:01 PM