Stencil模板引擎内置标签与过滤器详解

Stencil模板引擎内置标签与过滤器详解

Stencil Stencil is a simple and powerful template language for Swift. Stencil 项目地址: https://gitcode.com/gh_mirrors/ste/Stencil

Stencil是一款强大的Swift模板引擎,它提供了丰富的内置标签和过滤器来简化模板开发工作。本文将深入解析Stencil的核心功能,帮助开发者更好地利用这些特性构建动态模板。

循环控制标签

for循环标签

for标签是Stencil中最常用的循环控制结构,它支持多种迭代方式:

<ul>
  {% for user in users %}
    <li>{{ user }}</li>
  {% endfor %}
</ul>
高级特性
  1. 字典迭代:可以直接遍历字典的键值对

    {% for key, value in dict %}
      <li>{{ key }}: {{ value }}</li>
    {% endfor %}
    
  2. 范围迭代:支持使用N...M语法创建范围

    {% for i in 1...array.count %}
      <li>{{ i }}</li>
    {% endfor %}
    
  3. 条件过滤:使用where表达式过滤元素

    {% for user in users where user.name != "Kyle" %}
      <li>{{ user }}</li>
    {% endfor %}
    
  4. 空集合处理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 %}
逻辑运算符

支持andornot组合条件:

{% 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的内置标签和过滤器提供了强大的模板处理能力,从基本的循环控制到复杂的条件判断,再到模板的组织和继承,都能满足各种场景的需求。掌握这些核心功能将大大提高模板开发的效率和质量。

Stencil Stencil is a simple and powerful template language for Swift. Stencil 项目地址: https://gitcode.com/gh_mirrors/ste/Stencil

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁雨澄Alina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值