title: Override Canonical Object in Plone
body: <p>I'd like to render an object's view in place of another object and yet keep the canonical path as the one originally traversed to so breadcrumbs and object tabs, etc all still act the same.</p>
  
  <p>I know how to render the other object in place of the canonical one, but it almost seems impossible to override what is used for the canonical object unless I perhaps override the "canonical_object" method in the "plone_context_state" browser view.</p>
  
  <p>Here is the code I have my view <strong>call</strong> method for rendering the other object:</p>
  
  <pre><code>item = aq_base(default_item).__of__(self.context)
  layout = item.getLayout() or item.getDefaultLayout()
  try:
      return aq_acquire(item, layout)(*args, **kwargs)
  except AttributeError:
      try:
          return getMultiAdapter((item, self.request), name=layout)(*args, **kwargs)
      except: pass
  
  return super(DefaultItemEnabledView, self).__call__(*args, **kwargs)
  </code></pre>
  
  <p>Now, is it possible to make the canonical object used by plone the originally traversed one so breadcrumbs, object tabs, etc are applied appropriately? </p>