Homepage

Liquid - Tags: render / include

Last edit: Jul 11, 2026

render

The render tag renders a partial from app/views/partials/. The partial path must be a hardcoded string literal — you cannot use a variable for the path.


{% render 'shared/header' %}
{% render 'user/card', name: user.name, avatar: user.avatar %}

Passing parameters

Pass any number of named key-value pairs:


{% render 'product/card', title: product.title, price: product.price, featured: true %}

Inside product/card.liquid, only the explicitly passed variables (title, price, featured) are available — render creates an isolated scope. Variables from the calling template are not accessible unless passed explicitly.

Isolated scope

Unlike include, render operates in a fully isolated scope:

  • Variables from the calling template are not accessible inside the partial.
  • Variables defined inside the partial are not accessible in the calling template.
  • You must pass every value the partial needs as an argument.

This makes partials self-contained and easier to reason about.

break behaviour

A {% break %} tag inside a rendered partial stops execution of that partial only. Execution of the calling template resumes after the {% render %} call:


{% render 'might-break' %}
This line still executes even if 'might-break' uses {% break %}

with syntax

Pass a single value using the with keyword. The value is available inside the partial under a variable named after the partial:


{% render 'product/card' with product %}

This makes product available as card inside the partial (the variable name matches the partial filename).


include

The include tag renders a partial in the caller's scope. Prefer render for self-contained partials; use include when the partial needs access to the calling template's variables or must affect its control flow — for example helpers that redirect or set the response status of the including page, such as the can_do_or_* guards in pos-module-user.

Key differences from render

Feature render include
Partial path Must be a hardcoded string literal Can be a variable ({% include var %})
Scope Isolated — only explicitly passed params are accessible Shared — all calling template variables are accessible
{% break %} Stops the partial only; calling template continues Stops the entire render flow

Basic usage


{% include 'mypartial' %}
<br/>
{% include 'mypartial2' %}

You can also include using a variable path:


{% assign partial_name = 'shared/header' %}
{% include partial_name %}

Passing parameters to a partial


{% assign makers = 'subaru,honda,toyota,suzuki,lexus' | split: ',' %}
{% include 'car', minYear: 2000, transmission: 'auto', makers: makers %}

Inside car.liquid:


{{ minYear }} => 2000
{{ transmission }} => auto
{{ makers }} => ["subaru","honda","toyota","suzuki","lexus"]

Tip

Make sure you put a space between the parameter name and its value. minYear:2000 will not work.


Warning

You cannot name a parameter the same as the partial (in this case car).

Local variable using with

If a partial has the same name as a variable you want to pass, use with:


{% parse_json cars %}
[{
  "maker": "Honda",
  "model": "CRX"
}]
{% endparse_json %}
{% include 'car' with cars[0] %}

This creates a variable called car with the value of cars[0] inside the partial.

Iterating over a collection using for


{% parse_json cars %}
[{
  "maker": "Honda",
  "model": "CRX"
}, {
  "maker": "Subaru",
  "model": "Forester"
}, {
  "maker": "Lexus",
  "model": "LFA"
}]
{% endparse_json %}

{% include 'product' for cars %}

This renders the partial for each item. Each iteration has the product variable populated with the current item.

Private variables and exporting them

When you define a variable in a partial, it is not visible in the page that included it (variables flow from top to bottom, not bottom to top).

To use a variable defined inside a partial from outside, use the export tag and context.exports.

app/views/partials/export.liquid

{% parse_json honda %}
{
  "maker": "Honda",
  "model": "CRX",
  "year": "1991"
}
{% endparse_json %}
{% export honda, namespace: "my_car" %}

app/views/pages/include.liquid

{% include 'export' %}
Car: {{ context.exports.my_car }}
My car maker: {{ context.exports.my_car.honda.maker }}

Output:

Car: {"honda"=>{"maker"=>"Honda", "model"=>"CRX", "year"=>"1991"}}
My car maker: Honda

Questions?

We are always happy to help with any questions you may have.

contact us