Question: I'm trying to use pjax on my site, which means that for a full page request I render the whole template (this is normal behaviour), but on pjax requests I would like to render just one section. My templates all extend a master template.

How can I most elegantly do that?

Answer: 
This is kind of an old question but I would like to throw down another solution.

Lets say you have a view layout called ***main.blade.php*** and another view that extends main called ***page.blade.php***

***main.blade.php***

```
<!DOCTYPE html>
<html lang="en-GB">
<head>
    <title>My Title</title>

    @section('head')
        <link rel="stylesheet" href="{{ URL::asset('css/style.css') }}">
    @show
</head>
<body>

    @yield('content')

    @section('footer')
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script type="text/javascript" src="{{ URL::asset('js/main.js') }}"></script>
    @show
</body>
</html>

```

***page.blade.php***

```
@extends('main')

@section('content')
    <div class="container">
        This is a rendered page
    </div>
@stop

```

Just a simple basic template to get things started. In your controller if you return a `View::make('page')` you will get the complete HTML but Laravel provides a way to return specific sections. Here is an example of how to display the content you want based on if its an ajax call or not from within your controller:

***my\_controller.php***

```
function get_index() {
    $view = View::make('page');

    if(Request::ajax()) {
        $sections = $view->renderSections(); // returns an associative array of 'content', 'head' and 'footer'

        return $sections['content']; // this will only return whats in the content section

    }

    // just a regular request so return the whole view

    return $view;
}

```

Now when you make an ajax call to the page it will only return the content section rather than the entire HTML.
My best answer right now would be to state in your view that it must only extend the master template (layout) if the request is not being called via AJAX:

```
@if(!Request::ajax())
    @extends('master.template')
@endif

```

Note, however, that this solution may not be best for your specific templates (I can only guess that). You'd need to make sure that each template/view only contains things that do not repeat, like side bars, etc. For example, if you have a content area that needs to be updated with pjax, then your view should only contain whatever should be changed.