Stencil模板引擎内置标签与过滤器详解
Stencil是一款强大的Swift模板引擎,它提供了丰富的内置标签和过滤器来简化模板开发工作。本文将深入解析Stencil的核心功能,帮助开发者更好地利用这些特性构建动态模板。
循环控制标签
for循环标签
for
标签是Stencil中最常用的循环控制结构,它支持多种迭代方式:
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
高级特性
-
字典迭代:可以直接遍历字典的键值对
{% for key, value in dict %} <li>{{ key }}: {{ value }}</li> {% endfor %}
-
范围迭代:支持使用
N...M
语法创建范围{% for i in 1...array.count %} <li>{{ i }}</li> {% endfor %}
-
条件过滤:使用
where
表达式过滤元素{% for user in users where user.name != "Kyle" %} <li>{{ user }}</li> {% endfor %}
-
空集合处理:
empty
块处理空集合情况{% for user in users %} <li>{{ user }}</li> {% empty %} <li>没有用户</li> {% endfor %}
循环变量
for循环提供了多个有用的内置变量:
first
:是否为第一次迭代last
:是否为最后一次迭代counter
:当前迭代次数(1开始)counter0
:当前迭代次数(0开始)length
:循环总长度
使用示例:
{% for user in users %}
{% if forloop.first %}
这是第一个用户
{% endif %}
这是第{{ forloop.counter }}个用户
{% endfor %}
break与continue标签
break
用于提前退出循环,continue
用于跳过当前迭代:
{% for user in users %}
{% if user.inaccessible %}
{% break %} <!-- 退出整个循环 -->
{% endif %}
用户: {{ user.name }}
{% endfor %}
{% for user in users %}
{% if user.inaccessible %}
{% continue %} <!-- 跳过当前用户 -->
{% endif %}
用户: {{ user.name }}
{% endfor %}
条件控制标签
if条件标签
if
标签用于条件判断,支持多种运算符和组合:
{% if admin %}
管理员用户
{% elif user %}
普通用户
{% else %}
未登录
{% endif %}
逻辑运算符
支持and
、or
和not
组合条件:
{% if one and two %}
条件1和条件2都为真
{% endif %}
{% if not one %}
条件1为假
{% endif %}
{% if one or two %}
条件1或条件2为真
{% endif %}
注意运算符优先级:not
> and
> or
,可以使用括号改变优先级。
比较运算符
Stencil支持多种比较运算符:
{% if value == other_value %} <!-- 等于 -->
{% if value != other_value %} <!-- 不等于 -->
{% if value < other_value %} <!-- 小于 -->
{% if value <= other_value %} <!-- 小于等于 -->
{% if value > other_value %} <!-- 大于 -->
{% if value >= other_value %} <!-- 大于等于 -->
注意:比较运算符对数值、字符串和布尔类型有效。
模板组织标签
include标签
include
用于引入其他模板文件:
{% include "comment.html" %}
可以传递子上下文:
{% include "comment.html" comment %}
extends与block标签
支持模板继承机制:
<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block content %}
这里是子模板内容
{% endblock %}
内置过滤器
Stencil提供了多种实用的过滤器来处理数据:
字符串处理
{{ "stencil"|capitalize }} <!-- 首字母大写 → "Stencil" -->
{{ "Stencil"|uppercase }} <!-- 全部大写 → "STENCIL" -->
{{ "Stencil"|lowercase }} <!-- 全部小写 → "stencil" -->
默认值处理
Hello {{ name|default:"World" }} <!-- 如果name不存在则显示"World" -->
数组处理
{{ value|join:", " }} <!-- 数组元素用逗号连接 -->
{{ value|split:", " }} <!-- 字符串按逗号分割为数组 -->
缩进处理
{{ value|indent:2," ",true }} <!-- 缩进2个空格,包括首行 -->
动态过滤器
{{ string|filter:myfilter }} <!-- 动态应用myfilter变量指定的过滤器 -->
总结
Stencil的内置标签和过滤器提供了强大的模板处理能力,从基本的循环控制到复杂的条件判断,再到模板的组织和继承,都能满足各种场景的需求。掌握这些核心功能将大大提高模板开发的效率和质量。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考