介绍
cJinja 是一个使用cpp编写的轻量html模版解析库,依赖 ejson 来实现模版的数据替换(在jinja中称为context,上下文)。模版的语法基本与django jinja一致,功能还算丰富。源码仅有700行,适合学习,觉得不错的点个star吧。
(该程序为 https://github.com/HuangHongkai/tinyserver 中的一个模块)
编译
使用cmake来编译,windows和linux下均可编译。推荐使用clion作为IDE。
编译成功后在build目录下会有libcjinja.a和cjinja_test.exe这2个文件。libcjinja.a是静态库,cjinja_test.exe是一个简单的测试程序。
运行测试程序后会出现output.html(该文件是tmp.html解析后的结果。)
已经完成的功能
- 变量,例如 {{ var }}
- 变量索引访问,例如 {{ var.var2 }} {{ var[2] }} {{ var[2].key.value[2] }},其中**[]** 表示对数组(类似python的list)进行索引, . 表示对object进行索引(类似与python的dict)
- 表达式计算(包括字符串拼接) ,例如{{ 1*1+2-3*var }} {{ 1+1*2-3/4 }} {{ "asdfsf"+var }}
- for-endfor对列表进行迭代, 例如 {% for var in list %} {% endfor %}
- for-endfor对对象进行迭代,例如 {% for key,value in object %} {% endfor %} 或者 {% for key in object %}{% endfor %} 或者 {% for ,value in object %} {% endfor %}
- if-else-endif 语句, 其中if的条件支持四则运算,简单的比较(!= == )等,例如 {% if 1+1==2 %}aaa{% else %}bbb{%endif %}
- 模版包含,嵌套其他的模版文件{% include 'other.html' %}
- 模版语法错误提示
需要注意,表达式之间不能含有空格,例如{{ 1 + 1 }}是非法的,而{{ 1+1 }}是合法的。
使用方法
1. 变量和变量索引
简单的例子如下,
HtmlTemplate html("username:{{ username }}" "parm.list[1][2]: {{parm.list[1][2] }} " "parm.key: {{ parm.key }}