On Sun, Sep 19, 2004 at 11:01:28PM -0600, Dustin Lee wrote: > Sorry if this is an obvious question, but I'm fairly new to quixote > and I'm stumped on this issue. > > I have a URL like the following: > > http://some.url.com/myapp.cgi/animal/x123/assessment/234/ > > The basic idea is that for this animal inventory system there is an > assessment which has an id of 234 for animal with an id of x123. I > have the keyword assessment in there because there are other entities > associated with an animal id so I don't know what the object id > following x123 refers to unless I also give the name. The question is > when I instantiate the assessment (234) is there an easy way to > determine what the animal id was? the object referred to by 234 is an > AssessmentUI object in the assessment_ui module. I've got something similiar. What I do is, instead of using modules, is use objects. So my version would look like [Note: I haven't tested this code...] def _q_lookup(request, component): return AnimalUI(component) class AnimalUI: _q_exports = ['assessment'] def __init__(self, animal_id): self.animal_id = animal_id self.assessment = AssessmentHandler(animal_id) class AssessmentHandler: _q_exports = [] def __init__(self, animal_id): self.animal_id = animal_id def _q_lookup(self, request, component): return AssessmentUI(self.animal_id, component) class AssessmentUI: _q_exports = [] def __init__(self, animal_id, assessment_id): self.animal_id = animal_id self.assessment_id = assessment_id def _q_index(self, request): ... whatever ... You can remove the need for a separate Handler class for each by defining something like class Handler: _q_exports = [] def __init__(self, q_lookup_func, *args, **kw): self.q_lookup_func = q_lookup_func self.args = args self.kw = kw def _q_lookup(self, request, component): return self.q_lookup_func(component, *self.args, **self.kw) then AnimalUI becomes class AnimalUI: _q_exports = [] def __init__(self, animal_id): self.animal_id = animal_id self.assessment = Handler(lookup_assessment, animal_id) def lookup_assessment(component, animal_id): return AssessmentUI(animal_id, component) Something to watch out for is the Handler __init__ methods should be lightweight, as you're constructing a Handler object at each level its needed, per request. -- |>|\/|< /--------------------------------------------------------------------------\ |David M. Cooke http://arbutus.physics.mcmaster.ca/dmc/ |cookedm@physics.mcmaster.ca