首页
/ MtHaml项目中的Twig语法详解:Haml与Twig的完美结合

MtHaml项目中的Twig语法详解:Haml与Twig的完美结合

2025-06-08 16:33:26作者:廉皓灿Ida

什么是MtHaml/Twig

MtHaml是一个将Haml简洁语法与Twig模板引擎相结合的项目。Haml是一种HTML的简洁语法表示法,通过缩进和特殊符号来简化HTML编写,而Twig是PHP生态中广泛使用的模板引擎。MtHaml/Twig让开发者可以同时享受Haml的简洁语法和Twig的强大功能。

Haml基础语法快速入门

基本标签语法

在Haml中,标签以百分号(%)开头,后跟标签名。这与传统HTML的尖括号语法形成鲜明对比:

%strong= item.title

等价于Twig模板:

<strong>{{ item.title }}</strong>

这里的=符号表示后面的内容是Twig表达式,需要被解析并输出。

属性添加方式

Haml提供了多种方式来添加HTML属性:

  1. 类似HTML的语法
%strong(class="code" id="message") Hello, World!
  1. CSS风格的简写(特别适合class和id):
%strong.code#message Hello, World!
  1. 默认div标签(当省略标签名时):
.message Hello, World!

等价于:

<div class="message">Hello, World!</div>

嵌套结构与缩进规则

Haml使用缩进来表示嵌套关系,这与Python类似。缩进规则决定了标签的自动闭合:

#content
  .left.column
    %h2 Welcome to our site!
    %p= information
  .right.column
    - include "sidebar.twig"

会被转换为:

<div id="content">
  <div class="left column">
    <h2>Welcome to our site!</h2>
    <p>{{ information }}</p>
  </div>
  <div class="right column">
    {% include "sidebar.twig" %}
  </div>
</div>

重要规则

  • 当有内联内容时,标签在同一行自动闭合
  • 否则,当缩进级别降低到与开始标签相同时自动闭合
  • 自闭合标签(如img、meta)有特殊处理规则

Haml与Twig的交互方式

输出Twig表达式

在Haml中输出Twig表达式主要有以下几种方式:

  1. 使用=符号
%p.para= some.twig()|expression

转换为:

<p class="para">{{ some.twig()|expression }}</p>
  1. 字符串插值
%span Hello #{ name }

转换为:

<span>Hello {{ name }}</span>
  1. 属性值中的表达式
%span(id=any_valid_twig|syntax)

转换为:

<span id={{ any_valid_twig|syntax }}></span>

Twig控制结构

不直接输出的Twig代码(控制结构)以-开头:

%p
  - if some.condition|default(0) > 1 or foo in bar
    This is a control structure

转换为:

<p>
  {% if some.condition|default(0) > 1 or foo in bar %}
    This is a control structure
  {% endif %}
</p>

自动闭合规则

  • 如果标签后有缩进内容,MtHaml会自动添加结束标签
  • 否则,不添加结束标签

高级用法示例

  1. 继承与块
- extends "layout.twig"

- block title "this is an inline block"

- block body
  .content
    %h1 Title
    This block has contents
  1. 宏定义
- macro input_text(name, value)
  %input(type="text" name=name value=value)

- import _self as forms

= forms.input_text("foo", "bar")

最佳实践与注意事项

  1. 缩进一致性:必须保持严格的缩进一致性,建议使用空格而非制表符
  2. 表达式平衡:在属性值中,确保括号、引号等符号成对出现
  3. Twig功能全支持:MtHaml支持所有Twig功能,包括过滤器、测试、运算符等
  4. 自定义标签:可以无缝使用自定义Twig标签

MtHaml/Twig结合了Haml的简洁性和Twig的强大功能,为模板开发提供了高效、优雅的解决方案。通过理解其转换规则,开发者可以充分利用两者的优势,编写出更简洁、更易维护的模板代码。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
153
1.98 K
kernelkernel
deepin linux kernel
C
22
6
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
504
42
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
332
10
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
146
191
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
992
395
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
193
279
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
938
554
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
75
70