Jinjaの使用例

この記事ではJinjaの使用例について説明します。

カンマ区切りの数字

千の区切り

これにより、千の位でカンマで数字を区切ることができます。例えば:

入力 : 1000000

出力 : 1,000,000

Jinja
{% set y = EventAttribute['1'] %}
{{ '{:,}'.format(y)}}

カンマ以外の文字で数字を区切りたい場合は、次のコードを使用してください:

Jinja
{% set y = EventAttribute['1'] %}
{{'{:,}'.format(y) | replace(',','.')}}

数百の区切り

これにより、百の位でカンマで数字を区切ることができます。例えば:

入力 : 100000

出力 : 10,00,00

Jinja
{% set y = EventAttribute['1'] %}{% set x = y|string %}{% set t = x[-3:] %}{% set h = x[:-3] %}
{% set len = x|length %}{% set r = h|reverse %}
{% set my_list = [] %}
{% for i in range(0,len,2) %}
{{ my_list.append(r[i-2:i])|replace('None','')}}
{% endfor %}
{% set f =my_list|join(',')|reverse + t %}
{% if ',' in f[0] %}{{f[1:]}}{% else %}{{f}}{% endif %}

動的テーブルを生成する

これにより、複数のイベント属性からHTMLで動的なテーブルを生成できます。

Jinja
{% set storeNameList = EventAttribute['StoreName'] %}
{% set storeLinkList = EventAttribute['StoreLink'] %}
{% set storeAddressList = EventAttribute['StoreAddress'] %}
{% for i in storeNameList %}
{% set storeName = storeNameList[loop.index-1] %}
{% set storeLink = storeLinkList[loop.index-1] %}
{% set storeAddress = storeAddressList[loop.index-1] %}
{% endfor %}
{{ storeAddress }}
ストア名 ストア住所
{{ storeName }}

HTMLタグを削除する

これは、式からHTMLタグを削除することを可能にします。例えば:

Input :

こんにちは!

出力 : こんにちは!

Jinja
{{<HTML goes here>|striptags}}

製品セット

カンマ区切り値を生成する

これにより、製品セットからコンマ区切りの値を生成できるようになります。例えば:

入力 : [{"title":"BTC"},{"title":"DOT"}]
出力 : BTC,DOT

Jinja
{% set y = [{"title":"BTC"},{"title":"DOT"}]|map(attribute='title')|join(',') %}
{{y}}

値の発生

これにより、製品セットから値の発生を生成することができます。例えば:

Input : [{"title":"BTC"},{"title":"DOT"},{"title":"DOT"}]
Output : 2 (DOTは2回繰り返されています)

Jinja
{% set y =  %}
{{y|selectattr('title', 'equalto', 'DOT')|list|length}}

最高の出現

これにより、製品セットから製品の最も高い発生を生成できます。例えば:

入力 : [{"title":"BTC"},{"title":"DOT"},{"title":"DOT"}]
出力 : DOT (DOTは2回繰り返されています)

Jinja
{% set y = [] %} 
{% set new = [] %}
{%for i in y |groupby('title')%}
{{new.append((i.grouper, i.list|length)|list)|replace('None','')}}
{% endfor %}
{% set c = new|sort(attribute=1,reverse=true) %}
{{c[0][0]}}

合計金額を計算する

これにより、製品セット内のすべてのアイテムに対して特定の属性(例えば「価格」)の合計を計算できます。

入力 : [{"price":10},{"price":20},{"price":30}]
出力 : 60

Jinja
{% set y = [{"price":10},{"price":20},{"price":30}] %}
{{ y | map(attribute='price') | sum }}

推奨

最後の製品を表示

これにより、製品推奨から最後の製品を印刷できるようになります。製品が5つある場合、5番目の製品が印刷されます。

Jinja
{% if ProductSet.customValue%}{% for product in ProductSet.customValue[-1:]%}
{{product.title}}
{% endfor %}{% else %}MOE_NOT_SEND{% endif %}

すべての製品を表示 - 最後を除く

これにより、最後の製品を除くすべての製品を印刷することができます。

Jinja
{% if ProductSet.customValue%}{% for product in ProductSet.customValue[:-1]%}
{{product.title}}
{% endfor %}{% else %}MOE_NOT_SEND{% endif %}

ランダム商品を表示

これにより、推奨から定義された量のランダムな製品を印刷することができます。次の例では、5つの製品を印刷しています。

Jinja
{% set len = ProductSet.|length %}
{% set n = 5 %}{# Define the number of products to be defined here #}
{% set arr = [] %}
{% for i in range(0,n*3) %}
{% if arr|length <n%} {%="{%" set="set" x="x" len)|random="len)|random" %}="%}" if="if" not="not" in="in" arr="arr" {{="{{" arr.append(x)|replace(="arr.append(x)|replace(" none="None" ,="," )=")" }}="}}" endif="endif" endfor="endfor" for="for" i="i" arr%}{{productset.="arr%}{{ProductSet.">[i].price}}{% endfor %}</n%}>

各カテゴリから1つの製品を印刷する

これにより、推奨から各カテゴリの1つの製品を印刷することができます。

Jinja
{% set newps = [] %}
{% set addedcat = [] %} {% if ProductSet.Recommendation_recommended_items%}{% for product in ProductSet.Recommendation_recommended_items%} {% if product.sub_category not in addedcat %} {{newps.append(product)|replace('None','')}}{{addedcat.append(product.sub_category)|replace('None','')}} {% endif %} {% endfor %}{% else %}MOE_NOT_SEND{% endif %} {% for i in range(0,newps|length) %} {{newps[i].title}}. {{newps[i].sub_category}} {% endfor %}

詳細については、 推奨事項を使用してコンテンツをパーソナライズする を参照してください。

Content API

条件に応じてデータを取得して表示する

Jinjaを使用して、コンテンツAPIを呼び出してライブデータを取得し、そのデータを使用してメッセージをパーソナライズできます。この例では、プロパティの推奨を取得するためにコンテンツAPIを呼び出します。コードは次にAPIレスポンスからデータ ads_count をチェックします。プロパティが1つだけの場合、単一のメッセージが表示されます。そうでなければ、APIの応答から合計数と最低価格( min_price )を動的に挿入して、複数のメッセージを表示します。

Jinja
{% set conanAPI = ContentApi.pushRecommendationsLive({({"params":{"device_id":"{{UserAttribute['device_id']}}"}})}) %} {% if conanAPI.ads_count == 1 %}See 1 new property from AED {{conanAPI.min_price}}.{% else %}See {{conanAPI.ads_count}} new properties from AED {{conanAPI.min_price}} {% endif %}

カートアイテムを繰り返し表示する

別の一般的な使用ケースは、ユーザーの放棄されたカートのアイテムを取得し、それらをメッセージに表示することです。コンテンツAPIからカートデータを取得し、その後Jinjaで for ループを使用してカート内の各アイテムを反復処理し、名前、価格、画像などの詳細を表示できます。

たとえば、あなたのコンテンツAPIはこのようなJSONオブジェクトを返すかもしれません:

JSON
{
"date": "March 10, 2016",
"items": [
{
"name": "belt",
"image": "http://mydomain.com/images/1001.jpg",
"price": 11
}, {
"name": "shoes",
"image": "http://mydomain.com/images/1002.jpg",
"price": 12
}, {
"name": "hat",
"image": "http://mydomain.com/images/1003.jpg",
"price": 10
}
]
}

次に、各アイテムを表示するために以下のJinjaコードを使用できます:

Jinja
{% for cart_item in ContentApi.cart().items %}
<div>
<h2>{{ cart_item.name }}: ${{ cart_item.price|round(2) }}</h2>
<img src="{{ cart_item.image }}" />
</div>
{% endfor %}

詳細については、 コンテンツ API を使用してコンテンツをパーソナライズする を参照してください。

Auxilliary Data

ユーザーデータを取得して表示する

Jinjaを使用して、補助データソースから追加のユーザー情報を取得し、それをメッセージに表示できます。この例では、コードは最初にユーザーのユニーク識別子 ( UserAttribute['uid'] ) を取得します。それから、カスタムフィルター getAuxData を使用して、別のデータソース EASY_UI_AUX_DATA から情報を検索します。最後に、取得したデータから City の値にアクセスし、それを表示します。

Jinja
{% set EASY_UI_AUX_DATAData = UserAttribute['uid']|getAuxData('EASY_UI_AUX_DATA') %}
{{EASY_UI_AUX_DATAData.City}}

詳細については、 補助データを使用してコンテンツをパーソナライズする を参照してください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

How can we improve this article?