Sorry for the many posts. Looks like the post_delete operation on CONTROL2 is attempting to the parent controller CONTROL1. The URL is correct (verified using extra-data on debugger and via network sniffer wireshark). It uses the correct controller for get_one and get_all, but the wrong (parent) controller for post_delete (have not confirmed edit operation yet). Thanks.
Sample nested URL: .../CONTROL1/arg1/CONTROL2/arg2 On Apr 27, 8:49 pm, ozwyzard <[email protected]> wrote: > 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 > 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.

