Pyramid prior to 1.3 had no way to perform subrequests publicly. The reason is that the renderer attached to a view is only used if that is the active view for a request. Thus, if you have a URL which is mapped to viewA, and you want to delegate the request to viewB, the only way to do this is to call "viewB(request)" and return a Response from viewB (there are obviously other ways to accomplish this similar idea).
So, the decorator/renderer/etc are only active for the primary view each request. It is possible in 1.3 using the new introspection api to get the "active" (or decorated) version of the view and use it.
# find a view that you care about, using the documented properties of a view introspectable
for v in request.registry.introspector.get_category('views'):
intr = v['introspectable']
if intr['route_name'] == 'my_route':
break
else:
# no view found
return HTTPNotFound()
view = v['derived_callable']
return view(request.context, request)
Anyway, I apologize for this code, it's also not tested, but that is the basic idea of how you *could* perform a sub-request in pyramid if you wanted the sub-request to go through security checks, and declarative renderers.