[Zope3-Users] zc.table - how does sorting work?
Gary Poster
gary at zope.com
Tue Mar 14 13:29:08 EST 2006
On Mar 14, 2006, at 11:54 AM, Laurence Rowe wrote:
> Hi there,
>
> I'm trying to use zc.table to format the output of one of my forms.
> it seems to work ok for the unsorted formatter, but not for the
> StandalonSortFormatter. Here is the code that works with plain
> formatter:
>
>> columns = (
>> GetterColumn(name=u'dn', title=u'Distinguished Name',
>> getter=lambda i, f: i.dn, subsort=True),
>> GetterColumn(name=u'displayName', title=u'Name', getter=lambda
>> i, f: i.displayName, subsort=True),
>> GetterColumn(name=u'mail', title=u'Email Address',
>> getter=lambda i, f: i.mail, subsort=True),
>> )
>> class LDAPFilterForm(form.Form):
>> form_fields = form.Fields(interfaces.ILDAPFilter)
>> @form.action("Search")
>> def handle_search_action(self, action, data):
>> search = interfaces.ILDAPSearch(self.context, None)
>> results = search.search(data['filter'])
>> self.table = table.Formatter(self.context, self.request,
>> list(results), columns=columns)
>> return self.table()
>
> but when I change the Formatter to StandaloneSortFormatter, I still
> get the same html output. I have tried adding in this from the
> zc.table readme:
>
>> for c in columns:
>> directlyProvides(c, zc.table.interfaces.ISortableColumn)
Yes, you want this.
>> @adapter(IRequest)
>> @implementer(Interface)
>> def dummyResource(request):
>> return lambda:'/@@/zc.table'
>> provideAdapter(dummyResource, name='zc.table')
No, you don't want this.
> But then I get the following traceback:
>
>> 2006-03-14T16:34:32 ERROR SiteError http://localhost:8080/@@/zc.table
>> Traceback (most recent call last):
>> File "/usr/lib/python2.4/site-packages/zope/publisher/
>> publish.py", line 135, in publish
>> object = request.traverse(object)
>> File "/usr/lib/python2.4/site-packages/zope/publisher/
>> browser.py", line 500, in traverse
>> ob = super(BrowserRequest, self).traverse(object)
>> File "/usr/lib/python2.4/site-packages/zope/publisher/http.py",
>> line 451, in traverse
>> ob = super(HTTPRequest, self).traverse(object)
>> File "/usr/lib/python2.4/site-packages/zope/publisher/base.py",
>> line 289, in traverse
>> subobject = publication.traverseName(
>> File "/usr/lib/python2.4/site-packages/zope/app/publication/
>> publicationtraverse.py", line 56, in traverseName
>> ob2 = ob.publishTraverse(request, nm)
>> File "/usr/lib/python2.4/site-packages/zope/app/publisher/
>> browser/resources.py", line 40, in publishTraverse
>> locate(resource, sm, name)
>> File "/usr/lib/python2.4/site-packages/zope/app/location/
>> location.py", line 72, in locate
>> object.__name__ = name
>> TypeError: func_name must be set to a string object
>> exceptions.TypeError:
>> func_name must be set to a string object
>>> /usr/lib/python2.4/site-packages/zope/app/location/location.py(72)
>>> locate()
>> -> object.__name__ = name
>
> Using the debugger I can see:
>
>> (Pdb) name
>> u'zc.table
>
> Any ideas? I'm stumped.
Not sure, but I'm guessing it is the dummy adapter. Try again
without it.
Also, as I wrote yesterday, we have an alternate sorting
implementation that we ought to get in zc.table. I sent it to
Martijn Faassen; if you think you might look at it and maybe merge
it, I could send it to you too. :-)
Gary
More information about the Zope3-users
mailing list