Filters are basic methods for modifying strings, numbers, variables, and objects. Using a filter is as simple as adding | filter_name
after whatever you want to filter
<!-- product.name = "great subscription box" -->
{{ product.name | title }}
Output:
Great Subscription Box
The title
filter is a Jinja built-in filter
Themes have access to all the Jinja2 built-in filters, plus some Cratejoy defined filters, described below.
FORMATTING
currency
The currency
filter formats a currency according to your store’s configured currency. It defaults to 2 decimal places, but you can also specify different values.
<!-- price = 500 -->
{{ price | currency }}
{{ price | currency(0) }}
Output:
$5.00
$5
tojson
We also expose a tojson
filter, which converts an object into JSON. If used inside a script tag, disable escaping with jinja2’s ‘safe’ filter.
<!-- store.name = "My Store" -->
<script type="text/javascript">
runExampleCode({{ store.name | tojson | safe }});
</script>
Output:
<script type="text/javascript">
runExampleCode("My Store");
</script>
TAGS
Tag filters create HTML tags from Jinja variables.
img_tag
Creates an <img>
tag from a URL
{{ 'images/man_with_hat.jpg' | asset_url | img_tag("A dapper gentleman wearing a top hat", "thumbnail") }}
{{ 'images/man_with_hat.jpg' | asset_url | img_tag }}
Output:
<img src="//cdn.cratejoy.com/storename/designname/images/man_with_hat.jpg" alt="A dapper gentleman wearing a top hat" class="thumbnail" />
<img src="//cdn.cratejoy.com/storename/designname/images/man_with_hat.jpg" />
icon_tag
Creates an icon <link>
from a URL
{{ 'images/favicon.ico' | asset_url | icon_tag }}
Output:
<link href="//cdn.cratejoy.com/storename/designname/images/favicon.ico" rel="icon" type="image/x-icon">
stylesheet_tag
Creates a stylesheet <link>
from a URL
{{ 'css/style.css' | asset_url | stylesheet_tag }}
Output:
<link rel="stylesheet" href="//cdn.cratejoy.com/storename/designname/css/style.css" type="text/css" />
javascript_tag
Creates a javascript <script>
tag from a URL
{{ 'js/store.js' | asset_url | javascript_tag }}
Output:
<script type="text/javascript" src="//cdn.cratejoy.com/storename/designname/js/store.js"></script>
URL
URL filters help create URLs to files in your store's themes. It is important to use URL filters or you may be referencing your files in a way which bypasses our content distribution network and slows down your storefront's loading for customers.
asset_url
Returns a URL from a file asset which is part of a design
<a href="{{ 'images/big.jpg' | asset_url }}">Big Image</a>
Output:
<a href="//cdn.cratejoy.com/storename/designname/images/big.jpg">Big Image</a>
global_asset_url
Returns a URL from a file asset which is part of the Cratejoy provided platform
{{ 'css/store.css' | global_asset_url | stylesheet_tag }}
Output:
<link rel="stylesheet" href="//cdn.cratejoy.com/css/store.css" type="text/css" />
product
Return a product object for a given product id.
{% set product = 12345678 | get_product %}
{{ product.name }}
Output:
My Little Box
product_subscribe_url
Returns the URL that corresponds to a product subscription choice, for example a variant or a term
<a class="btn btn-default" href="{{ product | product_subscribe_url(chosen_values,"large-box") }}">Select Large Box</a>
Output:
<a class="btn btn-default" href="//teststore.cratejoy.com/subscribe/1111_My+Box/1111_large-box">Select Large Box</a>
product_ecom_url
Returns the URL that corresponds to an e-commerce product
<a href="{{ product | product_ecom_url }}">{{ product.name | safe}}</a>
Output:
<a href="//teststore.cratejoy.com/shop/product/1111_Dapper+Hat">Dapper Hat</a>
cratejoy_domain
Returns a store’s cratejoy domain
<a href="https://{{ store | cratejoy_domain }}/subscribe/">Subscribe Now!</a>
Output:
<a href="https://teststore.cratejoy.com/subscribe/">Subscribe Now!</a>
custom_domain
Returns a store’s custom domain
<a href="https://{{ store | custom_domain }}/subscribe/">Subscribe Now!</a>
Output:
<a href="https://teststore.com/subscribe/">Subscribe Now!</a>
UTILITY
These filters are time saver functions.
get_price_or_price_range
Returns a price or min-max price range for a product and optional variants. Since products can have a range of prices based on variant choices and term options, this method is a convenient way of seamlessly handling a single price or price range without any template side logic.
<span class="price">{{ product | get_price_or_price_range }}</span>
Output:
If the product has multiple pre-payment terms it may return a range like this:
<span class="price"><p>$10-$25</p></span>
If the product has just a single pre-payment term (such as month to month) it would return a single price:
<span class="price"><p>$25</p></span>
Variant values may also be specified
<!-- value is the variant value we're getting the price for -->
<span class="price">{{ product | get_price_or_price_range(value.variant_type, values = chosen_values + [value]) }}</span>
SubscriptionTypeTerms may also be specified
{{ product | get_price_or_price_range(term = selected_term ) }}
Both Variant values and SubscriptionTypeTerms can be provide to give the highest specific price or price range.
If you would like the prices as plain numbers, in cents, you can specify raw
and manipulate the output to your liking
{% set prices = product | get_price_or_price_range(raw=True) %}
{% if prices.min == prices.max %}
{{ prices.min | currency }}
{% else %}
{{ (prices.max/6) | currency }} - {{ prices.min | currency }} / month
{% endif %}
append_kvp
Returns a URL with a Key-Value pair appended to it. Used to select variants in subscribe flow
<!-- base_url = "http://teststore.cratejoy.com/subscribe/" -->
<a href="{{ base_url | append_kvp('box-size', 'small') }}">Select Small Box</a>
Output:
<a href="http://teststore.cratejoy.com/subscribe/box-size_small">Select Small Box</a>
category
Returns products matching passed in taxonomies.
<!--
store.ecom_products contains
name - taxonomies
"Bird Necklacke" - ['birds']
"Pith Helmet" - ['helmets']
"Snow Shoes" - ['shoes', 'snow']
"Hawk Headdress" - ['helmets', 'birds']
-->
{% for p in store.ecom_products | category('birds', 'helmets') %}
{{ p.name }}
{% endfor %}
Output:
Bird Necklace
Pith Helmet
Hawk Headdress
meta_value
Returns the meta field value for the passed in key
<!-- If your subscription had a meta field key value pair {"flavor_preference": "Savory"}-->
Your Flavor Preference: {{ subscription | meta_value("flavor_preference") }}
Output:
Your Flavor Preference: Savory
get_meta_dict
Returns a dictionary of all meta fields attached to the filtered object
<!-- If your subscription had a meta field key value pair {"flavor_preference": "Savory", "send_day":"Friday"}-->
{% set meta = subscription|get_meta_dict %}
Your Flavor Preference: {{ meta.flavor_preference }}
Your Send Day: {{ meta.send_day }}
Output:
Your Flavor Preference: Savory
Your Send Day: Friday
is_sold_out
Returns a boolean for an individual product's sold_out status. Returns False
if the product is available and True
if the product is sold_out.
{% if product | is_sold_out %}
<a type="button" class="disabled btn btn-large btn-primary">
SOLD OUT
</a>
{% else %}
<a type="button" class="btn btn-large btn-primary">
NOT SOLD OUT
</a>
{% endif %}
Output:
If the product is sold out:
<a type="button" class="disabled btn btn-large btn-primary">
SOLD OUT
</a>
If the product is available:
<a type="button" "class="btn btn-large btn-primary">
NOT SOLD OUT
</a>