# Views

## Introduction

Views contain all the HTML that you’re application will use to render to the user. Unlike Django, views in Masonite are your HTML templates. All views are located inside `resources/templates`directory.

All views are rendered with Jinja2 so we can use all the Jinja2 code you are used to. An example view looks like:

{% code title="resources/templates/helloworld.html" %}

```markup
<html>
  <body>
    <h1> Hello {{ 'world' }}</h1>
  </body>
</html>
```

{% endcode %}

## Creating Views

Since all views are located in `resources/templates`, we can use simply create all of our views manually here or use our `craft` command tool. To make a view just run:

{% code title="terminal" %}

```
$ craft view hello
```

{% endcode %}

This will create a template under `resources/templates/hello.html`.

## Calling Views

### Helper Function

There are several ways we can call views in our controllers. The first recommended way is using the `view()` function. Masonite ships with a `HelpersProvider` Service Provider. This provider will add several new built in functions to your project. These helper functions can be used as shorthand for several commonly used classes such as the `View` and `Request` class. See the [Helper Functions](https://docs.masoniteproject.com/v1.5/the-basics/helper-functions) documentation for more information.

One of the helper functions is the `view()` function which is accessible like any other built in Python function.

We can call views in our controllers like so:

{% code title="app/http/controllers/YourController.py" %}

```python
def show(self):
    return view('dashboard')
```

{% endcode %}

This will return the view located at `resources/templates/dashboard.html`. We can also specify a deeper folder structure like so:

{% code title="app/http/controllers/YourController.py" %}

```python
def show(self):
    return view('profiles/dashboard')
```

{% endcode %}

This will look for the view at `resources/templates/profiles/dashboard.html`

### From The Container

The `View` class is loaded into the container so we can retrieve it in our controller methods like so:

{% code title="app/http/controllers/YourController.py" %}

```python
def show(self, View):
    return View('dashboard')
```

{% endcode %}

This is exactly the same as using the helper function above. So if you choose to code more explicitly, the option is there for you.

{% hint style="success" %}
If this looks weird to you or you are not sure how the container integrates with Masonite, make sure you read the [Service Container](https://docs.masoniteproject.com/v1.5/architectural-concepts/service-container) documentation
{% endhint %}

## Passing Data to Views

A lot of the time we’ll need to pass in data to our views. This data is passed in with a dictionary that contains a key which is the variable with the corresponding value. We can pass data to the function like so:

{% code title="app/http/controllers/YourController.py" %}

```python
def show(self, Request):
    return view('dashboard', {'id': Request.param('id')})
```

{% endcode %}

{% hint style="info" %}
Remember that by passing in parameters like `Request` to the controller method, we can retrieve objects from the IOC container. Read more about the IOC container in the [Service Container](https://docs.masoniteproject.com/v1.5/architectural-concepts/service-container) documentation.
{% endhint %}

This will send a variable named `id` to the view which can then be rendered like:

{% code title="resources/templates/dashboard.html" %}

```markup
<html>
  <body>
    <h1> {{ id }} </h1>
  </body>
</html>
```

{% endcode %}
