Jinja2 模版引擎 代码生成

 

广泛用于生成各种模版代码

Jinja — Jinja Documentation (3.1.x) (palletsprojects.com)

 

https://jinja.palletsprojects.com/en/3.1.x/switching/

 

JinJa2 是一个 Python 实现的模板引擎

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全

 

 

Jinja is a fast, expressive, extensible templating engine. Special placeholders in the template allow writing code similar to Python syntax. Then the template is passed data to render the final document.

 

 

其他模板引擎 StringTemplate

https://docs.python.org/3/library/string.html#template-strings

 

 

https://github.com/jinja2cpp/Jinja2Cpp

Jinja2С++

C++ implementation of the Jinja2 Python template engine. This library brings support of powerful Jinja2 template features into the C++ world, reports dynamic HTML pages and source code generation.

 Jinja2C++ is a modern C++ implementation of the Python’s Jinja2 template engine.
This project was inspired by Jinja2CppLight library.

 

 pantor::inja

Inja is a template engine for modern C++, loosely inspired by jinja for python. It has an easy and yet powerful template syntax with all variables, loops, conditions, includes, callbacks, and comments you need, nested and combined as you like. Inja uses the wonderful json library by nlohmann for data input. Most importantly, inja needs only two header files, which is (nearly) as trivial as integration in C++ can get. Of course, everything is tested on all relevant compilers. Here is what it looks like:

 

 

Welcome to the C++ CTemplate system!

This library provides an easy to use and lightning fast text templating system to use with C++ programs.

It was originally called Google Templates, due to its origin as the template system used for Google search result pages. Now it has a more general name matching its community-owned nature.

https://github.com/OlafvdSpek/ctemplate

 

 

 

Comparison with other implementations

FeatureJinja2C++Jinja2CppLightpantor::injaPython Jinja2
More information   see [1] see [2] see [3]
{{ / }} yes yes yes yes
{% / %} yes yes yes yes
{# / #} yes yes yes yes
Single-line statements no no yes yes
raw/endraw yes no no yes
Whitespace control yes no yes yes
Statements        
set yes no no yes
block set yes no no yes
if / endif yes yes yes yes
else yes no yes yes
elif yes no no yes
for / endfor yes yes yes yes
recursive for loop yes no no yes
conditional for loop yes no no yes
extends / block yes no no yes
import yes no no yes
include yes no yes yes
macro / endmacro yes no no yes
call yes no no yes
filter yes no no yes
do (extension) yes no no yes
with (extension) yes no no yes
i18n (extension) no no no yes
continue/break (extension) no no no yes
autoescape (extension) no no no yes
Expressions        
String literals yes yes yes yes
Integer numbers yes yes yes yes
Floating numbers yes yes yes yes
Lists ([1, 3, 4]) yes no no yes
Tuples ((1, "one", 3.14)) yes no no yes
Dicts ({'dict': 'of', 'key': 'and', 'value': 'pairs'}) yes no no yes
True / False yes no no yes
+ operator yes no no yes
- operator yes no no yes
/ operator yes no no yes
// operator yes no no yes
% operator yes no no yes
* operator yes no no yes
** operator yes no no yes
== operator yes yes yes yes
!= operator yes yes yes yes
> / < / >= / <= operators yes yes yes yes
and / or / not logical operators yes no yes yes
in operator yes no yes yes
is operator yes no no yes
| (filter application operator) yes no no yes
~ (string concatenation operator) yes no no yes
() (call operator) yes no yes yes
. (attribute access) yes no yes yes
[] (attribute access) yes no no yes
[] (arrays slicing) no no no yes
Filters        
abs yes no no yes
attr yes no no yes
batch yes no no yes
capitalize yes no no yes
center no no no yes
default yes no yes (as function) yes
dictsort yes no no yes
escape yes no no yes
filesizeformat no no no yes
first yes no yes (as function) yes
float yes no yes (as function) yes
forceescape no no no yes
format yes no no yes
groupby yes no no yes
indent no no no yes
int yes no yes (as function) yes
join yes no no yes
last yes no yes (as function) yes
length yes no yes (as function) yes
list yes no no yes
lower yes no yes (as function) yes
map yes no no yes
max yes no no yes
min yes no no yes
pprint yes no no yes
random yes no no yes
reject yes no no yes
rejectattr yes no no yes
replace yes no no yes
reverse yes no no yes
round yes no yes (as function) yes
safe no no no yes
select yes no no yes
selectattr yes no no yes
slice yes no no yes
sort yes no yes (as function) yes
string yes no yes (as function) yes
striptags no no no yes
sum yes no no yes
title yes no no yes
tojson no no no yes
trim yes no no yes
truncate yes no no yes
unique yes no no yes
upper yes no yes (as function) yes
urlencode yes no no yes
urlize yes no no yes
wordcount yes no no yes
wordwrap yes no no yes
Testers        
callable no no no yes
defined yes no yes (as function) yes
devisibleby no no yes (as function) yes
eq yes no no yes
escaped no no no yes
even yes no yes (as function) yes
ge yes no no yes
gt yes no no yes
in yes no no yes
iterable yes no no yes
le yes no no yes
lower yes no no yes
lt yes no no yes
mapping yes no yes (as function) yes
ne yes no no yes
none no no no yes
number yes no yes (as function) yes
odd yes no no yes
sameas no no no yes
sequence yes no yes (as function) yes
string yes no yes (as function) yes
undefined yes no no yes
upper yes no no yes
Global functions and classes        
range yes no yes (as function) yes
lipsum no no no yes
dict no no no yes
cycler no no no yes
joiner no no no yes
namespace no no no yes

References

  • [1] https://github.com/hughperkins/Jinja2CppLight
  • [2] https://github.com/pantor/inja
  • [3] https://jinja.palletsprojects.com/en/2.10.x/

 

 

 

 

 

 

posted @ 2023-07-21 10:55  sinferwu  阅读(279)  评论(0编辑  收藏  举报