Grantlee模板引擎内置标签与过滤器详解
2025-06-11 05:55:48作者:郜逊炳
概述
Grantlee是一个基于Django模板语法的C++模板引擎,提供了丰富的内置标签和过滤器功能。本文将详细介绍Grantlee中的内置功能,包括从Django移植过来的标签和过滤器,以及Grantlee特有的扩展功能。
Django移植功能
Grantlee移植了Django 1.9版本中的大部分内置标签和过滤器,使得熟悉Django模板开发的用户能够快速上手Grantlee。这些功能包括:
常用标签
- if/else条件判断
- for循环
- block和extends模板继承
- include包含其他模板
- with创建局部变量
- autoescape自动转义控制
常用过滤器
- date日期格式化
- default默认值
- length获取长度
- lower/upper大小写转换
- slice切片
- join连接列表
- safe标记安全内容
未移植功能
由于技术限制和时间原因,Grantlee尚未移植以下Django功能:
- url标签(Grantlee没有视图系统)
- ssi标签(出于安全考虑)
- 部分过滤器如dictsort、filesizeformat、pluralize等
Grantlee特有功能
除了Django移植的功能外,Grantlee还提供了一些特有的标签,增强了模板的功能性。
media_finder标签
media_finder是Grantlee中一个非常实用的标签,用于获取外部媒体资源的完整URL。
基本用法
<img src="{% media_finder "someimage.png" %}" />
工作原理
该标签通过Engine::mediaUri方法查询TemplateLoaders获取URL,最终通过AbstractTemplateLoader::getMediaUri接口返回结果。
配置选项
- URL类型设置:通过Context::setUrlType方法配置生成绝对URL还是相对URL
- 相对路径设置:使用Context::setRelativeMediaPath方法指定相对基础路径
使用场景示例
假设我们有一个模板/home/user/myoutput.html,需要引用图片someimage.png:
- 设置相对路径为
"myoutput_media/" media_finder会生成路径myoutput_media/someimage.png- 开发者需要确保图片实际存在于
/home/user/myoutput_media/目录
这种设计使得输出文件和引用的媒体资源可以作为一个整体轻松移植。
range标签
range标签提供了类似Python中range函数的功能,用于生成数字序列。
基本用法
- 从0到5的序列:
<ul>
{% range 5 as num %}
<li>{{ num }}
{% endrange %}
</ul>
- 从5到10的序列:
<ul>
{% range 5 10 as num %}
<li>{{ num }}
{% endrange %}
</ul>
- 带步长的序列(5到50,步长5):
<ul>
{% range 5 50 5 as num %}
<li>{{ num }}
{% endrange %}
</ul>
无参数用法
{% range rating %}
<img src="{% media_finder "star.png" %}" />
{% endrange %}
这种用法会根据rating变量的值循环显示星形图标,非常适合评分系统的实现。
总结
Grantlee通过移植Django的模板功能和添加特有标签,提供了一个功能强大且灵活的模板引擎解决方案。media_finder标签简化了媒体资源管理,range标签增强了循环控制能力,这些特性使得Grantlee在C++项目中处理模板渲染变得更加高效和便捷。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0149- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0111
项目优选
收起
暂无描述
Dockerfile
731
4.73 K
Ascend Extension for PyTorch
Python
609
786
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1 K
1.01 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
392
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
145
237
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.15 K
148
暂无简介
Dart
983
251
Oohos_react_native
React Native鸿蒙化仓库
C++
348
401
昇腾LLM分布式训练框架
Python
166
197
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.67 K
986