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.