1. 程式人生 > >SpringBoot系列: Pebble模板引擎語法介紹

SpringBoot系列: Pebble模板引擎語法介紹

本文基於Pebble官方文件, 對pebble的語法做一些介紹. 

===============================
Pebble 官方資料
===============================
主頁: https://pebbletemplates.io/
github wiki: https://github.com/PebbleTemplates/pebble/wiki

 

===============================
Pebble 基本語法
===============================
表示式使用 {{  }} 括起來
{{expression}}

註釋使用 {#  #} 括起來
{# This is a comment #}

控制類語句使用 {%  %} 括起來

迴圈控制, 和python類似, for迴圈中支援else.

{% for article in articles %}
    <h3>{{ article.title }}</h3>
    <p>{{ article.content }}</p>
{% else %}
   <p>no article yet</p>
{% endfor %}

 

If 控制

{% if category == "news" %}
    {{ news }}
{% elseif category == "sports" %}
    {{ sports }}
{% else %}
    <p>Please select a category</p>
{% endif %}

 

變數賦值

{% set header = "Test Page" %}
{{ header }}

 

===============================
表示式
===============================
簡單表示式
{{variable}}
{{obj.property}}

簡單函式表示式
{{max(var1, var2) }}

Literals 表示式包括:
    字串: 使用單引號或雙引號括起來.
    true/false: 布林值
算術表示式, 加減乘除等等
null 或 none : 等同於 Java 的 null
列表集合表示式: [1,2,3] 或 ["one","two"]
map集合表示式: {"a":1,"b":2}
兩個集合包含操作符為:  contains
元素是否集合用:  in
邏輯操作符有:  and , or , not
比較符號有:  > , < 等等
相等符號為:  is


===============================
function
===============================
max()
min()
range(0, 3)
range(0, 6, 2)
0..3 相當於 range(0, 3)

 

===============================
test 斷言
===============================
test 是 pebble 一個非常有特點的概念, 和 is 操作符配合使用, 用來判斷表示式是否為真.
is even , 判斷是否為偶數
is odd, 判斷是否奇數
is null, 判斷是否為null
is empty, 判斷是否為 empty, 包括的情形有: 物件為null,或字串變數為"", 或空列表, 或空map等.
is map, 判斷表示式是否為map
is iterable, 判斷表示式是否可iterable.

 

===============================
filter
===============================
相比於 function 和 test, filter更經常使用到, 內建的filter有很多, 比如 upper/lower/default 等等,
{{ name || default('no value')}}

slice(fromIndex, toIndex) 的取值效果是[fromIndex, toIndex)
{{ 'Mitchell' | slice(1,3) }}

數字格式化
{{ 3.141592653 | numberformat("#.##") }}

日期格式化
{{ user.birthday | date("yyyy-MM-dd") }}

 

 

===============================
表示式的大小寫
===============================
頂級variable變數, 其名稱大小寫敏感, 比如:
{{namE}} 和 {{name}} 是不同的.

屬性級的名稱, 大小寫不敏感, 比如:
{{book.author}} 和 {{book.authoR}} 是效果一樣.

對於 {{book.author}} 這樣的佔位符, Pebble 會智慧地匹配下面的方案或屬性:
     book.get("author")
     book.getAuthor()
     book.isAuthor()
     book.hasAuthor()
     book.author()
     book.author


===============================
一些特別的tag
===============================
extends tag 用來擴充套件一個模板
{% extends "base" %}

include 用來將一個模板合併噹噹前文件中
{% include "advertisement" %}

import 用來將指定模板中的macro引入
{% import "form_util" %}

set 用來定義一個變數
{% set header = "Test Page" %}
{{ header }}

autoescape 用來開啟或關閉自動轉移, 甚至還可以設定使用何種轉義的引擎

{% autoescape false %}
    {{ danger }} {# will not be escaped #}
{% endautoescape %}

verbatim tag 告訴 pebble 不要按照pebble的語法解析tag內的內容, 該功能非常適合和一些 js 前段框架搭配使用.

{% verbatim %}
    {% for user in users %}
        {{ user.name }}
    {% endfor %}}
{% endverbatim %}

macro tag 可以定義一些程式碼片段, 然後複用這些macro:

{% macro input(type="text", name, value) %}
    <input type="{{ type }}" name="{{ name }}" value="{{ value }}" />
{% endmacro %

{{ input(name="country") }}
{# will output: <input type="text" name="country" value="" /> #}

{% import "form_util" %}
{{ input("text", "country", "Canada") }}

===============================
pebble的擴充套件性
===============================
pebble 不僅僅使用簡單, 而且擴充套件性非常好, 可以使用java程式碼編寫自己的 filter/function/test, 甚至可以擴充套件操作符.

選Java後端模板引擎強烈推薦pebble.