[Grok-dev] AddForm Mystery Number

Steve Schmechel steveschmechel at yahoo.com
Mon Jun 1 23:09:58 EDT 2009


So my real mistake was introducing whitespace into the "label" parameter of @grok.action.

I understand why the whitespace would be a problem, but why isn't it simply removed instead of falling all the way back to ugly hex encoding?

Oh well, not a Grok problem.

I guess I am back to wondering if it is good practice to call an auto-generated form view from another template.  I could try to link the names together with a global constant in my code and expose it as a variable to my template.

Is there a more elegant way to inject an auto-generated AddForm into a portion of a Grok view?

I'm sure there is a whole world of viewlets and such about to be recommended to me. :-) 

More simply, I'll ask again:  

- Does anyone really use auto-generated forms as a basis for real world projects, or are they just cool tools to use in demos and example code?

- Should I just figure that any serious development requires a complete set of some flavor of custom page templates for each view/form?

Thanks,
Steve

--- On Mon, 6/1/09, Steve Schmechel <steveschmechel at yahoo.com> wrote:

> From: Steve Schmechel <steveschmechel at yahoo.com>
> Subject: Re: [Grok-dev] AddForm Mystery Number
> To: grok-dev at zope.org
> Date: Monday, June 1, 2009, 6:22 PM
> 
> 
> Steve Schmechel wrote:
> > 
> > 
> > When looking at the view created by:
> > 
> > class Upload(grok.AddForm):
> >     grok.context(FileContainer)
> >     form_fields =
> >
> grok.AutoFields(zope.app.file.interfaces.IFile).select('data')
> > 
> > you can see that the HTML for the submit button is
> generated like:
> > <input type="submit"
> id="form.actions.4164642066696c65"
> > name="form.actions.4164642066696c65" value="Add file"
> class="button" />
> > 
> > Where does the "magic number" 4164642066696c65 come
> from?
> > 
> > 
> 
> I found the answer in the Action class of
> zope/formlib/form.py.  (Seems
> obvious now.)  So for anyone who was curious, read
> below.  I also have a
> question (following the explanation) for anyone with time
> to offer me a
> suggestion.
> 
> When a name is not passed to the constructor, the label
> value is checked
> against a regex and, if it passes, it is lower-cased and
> used.  If not, the
> label is hex encoded and that value becomes the name used
> for the "id" and
> "name" attributes.
> 
> Clever, if not entirely expected.  In any case, it
> should be safe using this
> value in a page template as long as the decorator on the
> view's add method,
> @grok.action('Add file'), does not change.  
> 
> However, I would prefer something a little more
> deterministic.  
> 
> Is there a way to inject a name value into the
> grok.AutoFields when
> "zope.app.file.interfaces.IFile" does not seem to support
> this?
> 
> ----------
> 
> _identifier = re.compile('[A-Za-z][a-zA-Z0-9_]*$')
> class Action(object):
> 
>     interface.implements(interfaces.IAction)
> 
>     def __init__(self, label, **options):
>         (success, failure, condition,
> validator,
>          prefix, name, data
>          ) =
> _action_options(**options)
> 
>         self.label = label
> 
>         [self.success_handler,
> self.failure_handler,
>          self.condition,
> self.validator] = [
>             _callify(f) for f
> in (success, failure, condition, validator)]
> 
>         if name is None:
>             if
> _identifier.match(label):
>                
> name = unicode(label).lower()
>             else:
>                
> name = label.encode('hex')
> 
> ...
> 
> @namedtemplate.implementation(interfaces.IAction)
> def render_submit_button(self):
>     if not self.available():
>         return ''
>     label = self.label
>     if isinstance(label,
> zope.i18nmessageid.Message):
>         label =
> zope.i18n.translate(self.label, context=self.form.request)
>     return ('<input type="submit" id="%s"
> name="%s" value="%s"'
>             ' class="button"
> />' %
>             (self.__name__,
> self.__name__, label)
>             )
> 
> -- 
> View this message in context: http://www.nabble.com/AddForm-Mystery-Number-tp23799424p23824030.html
> Sent from the Grok mailing list archive at Nabble.com.
> 
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
> 


      


More information about the Grok-dev mailing list