SendGrid动态模板中能否通过复杂Handlebars表达式简化品牌logo判断逻辑
SendGrid动态模板匹配品牌logo的实现方案
核心结论
完全可以通过Handlebars的字符串包含匹配能力,实现仅4条判断覆盖全部门店的需求,相比逐门店写条件判断的可维护性提升一个量级,且不需要额外开发自定义辅助方法,SendGrid平台原生就支持相关能力。
可直接落地的字符串匹配写法
SendGrid动态模板原生内置了contains辅助方法,可判断目标变量中是否包含指定关键词。结合你当前storeName采用「品牌名 - 门店编号」固定格式的特点,直接对品牌关键词做包含判断即可,不需要拆分提取门店编号部分,参考写法如下:
{{#contains storeName "Real One"}} <img src="real-one-official-logo.png" alt="Real One 品牌"> {{else contains storeName "Low Beam"}} <img src="low-beam-official-logo.png" alt="Low Beam 品牌"> {{else contains storeName "Monte"}} <img src="monte-official-logo.png" alt="Monte 品牌"> {{else contains storeName "Huskar Promo"}} <img src="huskar-promo-official-logo.png" alt="Huskar Promo 品牌"> {{else}} <img src="default-fallback-logo.png" alt="通用默认品牌"> {{/contains}}
这种写法的优势:
- 仅4条核心判断,就能覆盖当前所有100+门店,后续新增门店只要品牌名不变,完全不需要修改模板逻辑
- 从根源上解决你之前逐门店写判断的问题:不需要为100多家门店逐一写匹配分支,也避免了多层嵌套条件容易写错的语法问题(你之前的示例代码里就出现了多套一层大括号、嵌套结构错位的问题)
- 最后增加了兜底分支,万一后续出现新增品牌未及时补充判断的情况,不会出现图片加载失效的问题
长期维护更优的方案
如果后续还会持续新增品牌线、调整品牌logo素材,更省维护成本的优化方向是从传参侧调整:
- 不需要反复调整SendGrid模板的逻辑,在应用侧构造模板入参时,直接从
storeName中提取品牌值,同步传入对应品牌的logo地址(比如新增brandLogo字段),模板内直接通过{{ brandLogo }}引用即可,连4个条件判断都不需要写 - 后续如果要更换logo、调整品牌与门店的映射关系,只需要修改应用侧的参数生成逻辑,完全不用打开SendGrid模板做版本迭代
注意事项
- 字符串包含匹配的前提是品牌关键词没有互相包含关系,当前四个品牌名(Real One、Low Beam、Monte、Huskar Promo)是独立无重叠的,完全不会出现误匹配的问题
- 匹配关键词不要设置得太泛,比如如果后续新增名称包含"Pro"的品牌,不要只用"Pro"做判断关键词,否则会和"Huskar Promo"的关键词重叠导致匹配错误
内容的提问来源于stack exchange,提问作者Nish Raman
相关产品推荐
相关产品推荐

