SendGrid Handlebars模板多OR条件实现优化方案问询
解决SendGrid Handlebars多条件或判断的内容重复问题
我正在开发一个基于SendGrid Design模板的个性化邮件营销平台,通过Handlebars根据联系人属性展示对应内容区块。当内容区块仅关联1-2个属性时,用{{if}}或{{or}}就能搞定,但{{or}}仅支持2个参数,部分内容区块需要匹配10+属性,之前尝试的多参数or、else嵌套or等方法都无效,唯一可行的多次重复内容的方法又会占用过多模板空间(SendGrid模板有1MB限制)。
可行的优化方案
方案1:嵌套{{or}}实现多条件或判断
SendGrid的Handlebars允许嵌套{{or}},通过两两嵌套的方式实现多条件或逻辑,内容只需定义一次:
<h1>This is the mail</h1> {{#if (or (or prop1 prop2) (or prop3 prop4))}} <p>This content shows if any of prop1-prop4 is true</p> {{/if}}
针对10个以上属性,继续嵌套即可:
{{#if (or (or (or (or (or prop1 prop2) prop3) prop4) prop5) (or (or prop6 prop7) (or prop8 prop9)))}} <!-- 目标内容区块(仅需写一次) --> {{/if}}
这种方法无需修改数据结构,直接在模板中实现多条件判断,避免内容重复。
方案2:数据层面预处理(更简洁)
在向SendGrid传递联系人数据前,提前将需要判断的多个属性合并为一个布尔字段:
// 示例:预处理联系人数据 const contact = { user_branch_finance: false, user_branch_technology: true, user_branch_government: false, // ...其他分支属性 // 合并所有目标属性为一个字段 show_industry_content: user_branch_finance || user_branch_technology || user_branch_government || ... };
之后在模板中只需判断这个合并后的字段:
{{#if show_industry_content}} <p>This content shows for any of the target branches</p> {{/if}}
该方法彻底简化模板逻辑,避免复杂嵌套,同时最大化减少模板体积,是最优解。
为什么之前的方法失败
- Approach1:SendGrid Handlebars的
{{or}}仅支持2个参数,多参数会直接返回false - Approach2-4:不符合Handlebars的语法规范,导致模板验证失败
- Approach5:重复内容会快速消耗模板的1MB大小限制,扩展性差
内容的提问来源于stack exchange,提问作者Ruud van Falier
相关产品推荐
相关产品推荐

