首页 > 其他分享 >PebbleTemplates 模版引擎使用

PebbleTemplates 模版引擎使用

时间:2023-03-16 13:11:30浏览次数:78  
标签:String RuntimeException 模版 throw PebbleTemplates 引擎 new public

PebbleTemplates 是一个类似jinja 的java 模版引擎(受twig启发)支持的能力还是很多的,而且扩展性很不错,比如模版资源加载,模版缓存
自定义扩展。。。。,是一个值得使用的模版引擎

一个s3 loader

  • 参考代码
    基于了minio client 通过配置指定
 
public class S3Loader implements Loader<String> {
 
    private MinioClient minioClient;
    private String bucket;
    public S3Loader(MinioClient minioClient,String bucket) {
        this.minioClient = minioClient;
        this.bucket=bucket;
    }
 
    @Override
    public Reader getReader(String cacheKey) {
        Reader targetReader = null;
        try {
            GetObjectResponse response = this.minioClient.getObject(GetObjectArgs.builder().bucket(this.bucket).object(cacheKey).build());
            targetReader = new InputStreamReader(response);
        } catch (ErrorResponseException e) {
            throw new RuntimeException(e);
        } catch (InsufficientDataException e) {
            throw new RuntimeException(e);
        } catch (InternalException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        } catch (InvalidResponseException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (ServerException e) {
            throw new RuntimeException(e);
        } catch (XmlParserException e) {
            throw new RuntimeException(e);
        }
        return targetReader;
    }
 
    @Override
    public void setCharset(String charset) {
 
    }
 
    @Override
    public void setPrefix(String prefix) {
 
    }
 
    @Override
    public void setSuffix(String suffix) {
 
    }
 
    @Override
    public String resolveRelativePath(String relativePath, String anchorPath) {
        return null;
    }
 
    @Override
    public String createCacheKey(String templateName) {
        return templateName;
    }
 
    @Override
    public boolean resourceExists(String templateName) {
        return true;
    }
}
集成s3 loader
  • 入口代码
public class App {
    public static void main(String[] args) throws IOException {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint("http://127.0.0.1:9000")
                        .credentials("minio", "minio123")
                        .build();
        // 推荐基于DelegatingLoader 进行加载,可以支持多种loader
        DelegatingLoader delegatingLoader = new DelegatingLoader(Arrays.asList(new S3Loader(minioClient,"demoapp")));
        PebbleEngine engine = new PebbleEngine.Builder().loader(delegatingLoader).build();
        PebbleTemplate compiledTemplate = engine.getTemplate("home.html");
        Map<String, Object> context = new HashMap<>();
        context.put("name", "Mitchell");
        Writer writer = new StringWriter();
        compiledTemplate.evaluate(writer, context);
        String output = writer.toString();
        System.out.println(output);
    }
}
  • 参考模版内容

 

 

 


home.html

 
{% extends "100/base.html" %}
 
{% block title %} Home {% endblock %}
 
{% block content %}
<h1> Home </h1>
<p> Welcome to my home page. My name is {{ name }}.</p>
{% endblock %}

base.html

<html>
<head>
    <title> 自定义web page {% block title %}{% endblock %}</title>
</head>
<body>
<div id="content">
    {% block content %}{% endblock %}
</div>
 
<div id="footer">
    {% block footer %}
    Copyright 2018
    {% endblock %}
</div>
</body>
</html>
   
  • 运行效果

 

 

 

s3 参考玩法

 

 

 


简单说明: 通过提供模版管理能力(基于s3 api + 包装),可以将自定义模版以及公共模版访问s3 bucket 不同目录中,模版管理中进行模版片段的组合(可以支持不同的模版入口定义),对于业务为了提升性能,可以添加cache 能力(可以基于redis 以及 local cache 进行多级处理)

说明

PebbleTemplates 的扩展能力很方便,利用PebbleTemplates 灵活的扩展能力,我们可以很好的设计一个基于模版的系统,对于jinja 社区也包含了一个开源的实现(jinjava)当然也包括了支持自定义扩展

参考资料

https://min.io/docs/minio/linux/developers/java/API.html
https://github.com/PebbleTemplates/pebble
https://github.com/rongfengliang/pebbletemplates-learning
https://palletsprojects.com/p/jinja/
https://twig.symfony.com/
https://pebbletemplates.io/
https://github.com/HubSpot/jinjava

标签:String,RuntimeException,模版,throw,PebbleTemplates,引擎,new,public
From: https://www.cnblogs.com/rongfengliang/p/17222173.html

相关文章

  • 如何看一个小程序是不是套模版开发的,值不值钱
    模版代码是哪来的呢,其实就和很多二手货一样,一些公司的淘汰产品。下面我做一些实验来说明,这些实验大家也可以自己试试。 我们为做测试,买很多手机,不太现实,所以用模拟器代替......
  • 火山引擎 DataTester:A/B 实验如何应用在抖音的产品优化流程中?
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 日前,在WOT全球创新技术大会上,火山引擎DataTester技术负责人韩云飞做了关于字......
  • c++之模版类
    一.模板类的定义函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体;意义:对于功能完全一样,只是参数类型不同的函数,能写一段通用代码是......
  • thymeleaf 工具类 ( Servlet 模板 TemplateEngine 引擎)
    publicclassThymeleafUtil{privatestaticfinalTemplateEngineengine;static{engine=newTemplateEngine();ClassLoaderTemplateR......
  • 限时促销,火山引擎 ByteHouse 为企业带来一波数智升级福利!
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 面对庞杂的海量数据,稳定高速的实时数据处理能力,成为了当下企业数智升级过程中备......
  • 外贸建站如何提高搜索引擎排名,吸引更多潜在客户?
    在如今全球贸易日益繁荣的背景下,越来越多的企业开始重视外贸建站,并寻求提高搜索引擎排名以吸引更多潜在客户。那么,如何才能有效地提高外贸网站的搜索引擎排名呢?本文将为您详......
  • InnoDB引擎
    逻辑存储结构InnoDB的逻辑存储结构如下图所示:  1).表空间表空间是InnoDB存储引擎逻辑结构的最高层,如果用户启用了参数innodb_file_per_table(在8.0版本中默认开......
  • 【MySQL-存储引擎,逻辑存储结构,内存,磁盘】
    目录:一、MySQL存储引擎二、InnoDB存储引擎1、InnoDB逻辑存储结构2、InnoDB架构3、InnoDB内存结构4、InnoDB磁盘结构一、MySQL存储引擎1、查看当前版本支持的存储引擎sho......
  • 学会规则引擎Drools,让你早点下班
    前言现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而且这些规则可能随时发生变化,甚至增加新的规......
  • HO引擎近况20230310
    这几个月冒出来好几件事上个月我有两次想起来写随笔了,但一转眼就忘了媳妇怀孕10周,孩子没发育出来就完了要搬家,找房子,我们自己收拾东西,等待房东收拾东西摩托车拆保......