title: Rendering data to a template summary: Call and render SilverStripe templates manually. # Rendering data to a template Templates do nothing on their own. Rather, they are used to render a particular object. All of the `<% if %>`, `<% loop %>` and other variables are methods or parameters that are called on the current object in [scope](syntax#scope). All that is necessary is that the object is an instance of [api:ViewableData] (or one of its subclasses). The following will render the given data into a template. Given the template: **mysite/templates/Coach_Message.ss** :::ss $Name is the $Role on our team. Our application code can render into that view using `renderWith`. This method is called on the [api:ViewableData] instance with a template name or an array of templates to render. **mysite/code/Page.php** :::php $arrayData = new ArrayData(array( 'Name' => 'John', 'Role' => 'Head Coach' )); echo $arrayData->renderWith('Coach_Message'); // returns "John is the Head Coach on our team."
Most classes in SilverStripe you want in your template extend `ViewableData` and allow you to call `renderWith`. This includes [api:Controller], [api:FormField] and [api:DataObject] instances.
:::php $controller->renderWith(array("MyController", "MyBaseController")); Member::currentUser()->renderWith('Member_Profile'); `renderWith` can be used to override the default template process. For instance, to provide an ajax version of a template. :::php renderWith("AjaxTemplate"); } else { return $this->httpError(404); } } } Any data you want to render into the template that does not extend `ViewableData` should be wrapped in an object that does, such as `ArrayData` or `ArrayList`. :::php push(new ArrayData(array( 'Title' => 'First Job' ))); return $this->customise(new ArrayData(array( 'Name' => 'John', 'Role' => 'Head Coach', 'Experience' => $experience )))->renderWith("AjaxTemplate"); } else { return $this->httpError(404); } } }