I think your approach is better after a bit of examination. The decoupling of the dataspace from the template is certainly more flexible.
The Template example from earlier in the thread is a good example of this. Many template engines (and WACT too in the early days) put assign on the template. Over time, I found that splitting the Template up into two separate objects, the Template object and a DataSource object vastly improved the flexibility of the design. For trivial simple cases it seems more complex because it introduces a two stage process: