[Zope] Why is it so hard to do simple things?
Richard Jones
rjones@ekit-inc.com
Wed, 8 May 2002 10:30:12 +1000
On Wed, 8 May 2002 10:12, John Adams wrote:
> I'm new to Zope, and new to Python, but certainly not new to software
> engineering, with most of my background in C, Perl and Java.
That's nice.
> If I was doing this in perl it'd be quite easy; I could check the query
> variable, and act on it -- but now I have to deal with things like not
> being able to even examine the variable without throwing an exception, and
> the fact that Python doesn't short-circuit blows.
>
> i.e. You can't examine something like:
>
> if (hasattr(request,'perm_or_temp') and request.perm_or_temp == 'P')
> ...
>
> In Zope, I assume that I should be using DTML here, and perhaps dtml-in
> over the items in the radio list.
Number one suggestion: have the page call a python script method that checks
the environment for a form submission as the first thing it does. If it
doesn't find a form submission, have it set the environment to your sensible
form defaults. Your presentation/view code (DTML or ZPT) now doesn't have to
have lots of yucky code in it to handle the various with/without cases.
> # Default block -- this is a really shitty way to do this sort
> # of thing. I hate python.
Number two suggestion: take your attitude and shove it up your arse.
> if not hasattr(request,'perm_or_temp'):
> print "<INPUT TYPE='RADIO' NAME=perm_or_temp VALUE='P' CHECKED>
> Permanent"
> print "<INPUT TYPE='RADIO' NAME=perm_or_temp VALUE='T'> Temporary"
> return printed
>
> # else we have it, process the request
> print "<INPUT TYPE='RADIO' NAME=perm_or_temp VALUE='P'>"
>
> if request.perm_or_temp == 'P'):
> print "CHECKED"
>
> print "> Permanent"
>
> print "<INPUT TYPE='RADIO' NAME=perm_or_temp VALUE='T'>"
>
> if request.perm_or_temp == 'T':
> print "CHECKED"
>
> print "> Temporary"
>
> return printed
If you don't want to split the model and view code as I suggested above, try
this python script code for generating radio boxes.
perm_or_temp = getattr(request, 'perm_or_temp', 'P')
for value, label in (('P', 'Permanent'), ('T', 'Temporary')):
if perm_or_temp == value: checked = 'CHECKED'
else: checked = ''
print '<INPUT TYPE="RADIO" NAME="perm_or_temp" VALUE="%s" %s>%s'%(value,
checked, label)
Richard