In summary, post_delete would work if it attempted a delete using arg2 as the primary key (for CONTROL2) as opposed to using arg1 (which is CONTROL1's primary key).
Thanks. On Apr 27, 8:46 pm, ozwyzard <[email protected]> wrote: > IS THERE ANY WAY TO CONSUME THE ARGUMENTS IN __before__ OR VIA SOME > OTHER OVERRIDE? > > Sample nested URL: .../CONTROL1/arg1/CONTROL2/arg2 > > In the overridden __before__ routine, I added the lines that the > default __before__ in CrudRestController does: > > def __before__(self, *args, *kw): > tmpl_context.menu_items = self.menu_items > tmpl_context.title = self.title > ... split the url ... > self.parent_arg = arg1 > > With the above changes, the menu_items is None and avoids the > exception in the template rendering. > > However, the post_delete() function in CrudRestController still gets > all the original arguments and tries to delete the wrong record, since > the *args passed to __before__ is a tuple and cannot be consumed by > __before__ and the underlying model (for CONTROL2) has just 1 primary > key v.i.z. arg2. I.E. pks = [id] but args = (arg1, CONTROL2, arg2) > and it tries to use arg1 as the primary key to CONTROL2 and fails. > > @expose() #CrudRestController source code > def post_delete(self, *args, **kw): > """This is the code that actually deletes the record""" > pks = self.provider.get_primary_fields(self.model) > d = {} > for i, arg in enumerate(args): > d[pks[i]] = arg > self.provider.delete(self.model, d) > redirect('./' + '../' * (len(pks) - 1)) > > IS THERE ANY WAY TO CONSUME THE ARGUMENTS IN __before__ OR VIA SOME > OTHER OVERRIDE? > > Thanks. > > On Apr 26, 11:25 pm, ozwyzard <[email protected]> wrote: > > > > > Thanks. I was trying the __before__ method in the parent controller > > as opposed to the leaf controller. Once I overrode the __before__ > > method in the leaf (child) controller, I was able to get the nesting > > working for get and get_all. However, edit and delete fail in genshi > > when trying to iterate through menu_items (even though I am not using > > menu_items). I have posted a separate post to ask where I can find > > the source code for CrudRestController. > > > Module ?:19 in <Expression > > u'iter(sorted(tmpl_context.menu_items.iteritems()))'> > > << <div style="float:left; padding-left:0px;"> > > <ul id="menu_items" py:if="hasattr(tmpl_context, > > 'menu_items')"> > > <li py:for="lower, item in > > sorted(tmpl_context.menu_items.iteritems())"> > > <a href="${'../' * (1 + value_of('pk_count', 1))}$ > > {lower}s/">$item.__name__</a> > > </li>>> <li py:for="lower, item in > > sorted(tmpl_context.menu_items.iteritems())"> > > > Module genshi.template.eval:321 in lookup_attr view > > Module genshi.template.eval:405 in undefined view > > UndefinedError: '' has no member named "iteritems" > > > ================== > > > On Apr 6, 11:21 pm, Wesley Dyk <[email protected]> wrote: > > > > On Mon, Apr 5, 2010 at 6:20 PM, ozwyzard <[email protected]> wrote: > > > > When using CRUDRestController, is there a way to implement REST style > > > > URLs as follows? > > > > > > > > http://website.com/controller_1/arg_11/arg_12/controller_2/arg_21/arg_22 > > > > > It seems the CRUDRestController is not derived from > > > > ObjectDispatchController, so the new TG2 'lookup' method does not > > > > apply. As a workaround, I am trying to implement the above by > > > > instantiating controller2 within controller1's get_one() method. > > > > > References: > > > >http://turbogears.org/2.0/docs/modules/tgcontroller.html#tg.controlle... > > > >http://turbogears2.sourcearchive.com/documentation/2.0.1/controllers_... > > > > > Thanks. > > > > > -- > > > > You received this message because you are subscribed to the Google > > > > Groups "TurboGears" group. > > > > To post to this group, send email to [email protected]. > > > > To unsubscribe from this group, send email to > > > > [email protected]. > > > > For more options, visit this group > > > > athttp://groups.google.com/group/turbogears?hl=en. > > > > I would check out this link on the RestController implementation of > > > the same style. The key is the __before__ method. CrudRestController > > > implements this method, so be sure to call it if you override it. > > > >http://turbogears.org/2.0/docs/main/RestControllers.html#nesting-reso... > > > > Wes > > > -- > > You received this message because you are subscribed to the Google Groups > > "TurboGears" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/turbogears?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "TurboGears" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/turbogears?hl=en. -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/turbogears?hl=en.

