如何在我的 Sendgrid 事务模板中包含 Jinja2 模板

Posted

技术标签:

【中文标题】如何在我的 Sendgrid 事务模板中包含 Jinja2 模板【英文标题】:How to include Jinja2 templating in my Sendgrid Transactional Template 【发布时间】:2020-04-07 13:27:13 【问题描述】:

有没有办法在 Sendgrid 模板中包含 jinja2 模板? 我试图在 Sendgrid 模板中使用 % for %% endfor % 但它似乎不起作用。虽然电子邮件发送成功,但我打开它时它是空的。

html 代码(placeorder.html):

  <body>

  <h3>From: name</h3>
  <h3>Email: emailFrom</h3>



    <table id="customers">
        <tr>
            <th>Product</th>
            <th>Quantity</th>
            <th>Sub Total</th>
        </tr>
        % for order_item in order.items.all %
        <tr>
            <td> order_item.item.title</td>
            <td> order_item.quantity </td>
            <td>&#8358; order_item.get_final_price </td>
        </tr>
        % endfor %
        <p>
            <span>Total &#8358;</span>
            <strong> order.get_total </strong>
        </p>

    </table>

</body>

Views.py(Django)

     def placeorder(request):
         form = orderform(request.POST)
         try:
            order = Order.objects.get(user=request.user, ordered=False)
            if form.is_valid():
               order = Order.objects.get(user=request.user, ordered=False)
               name = form.cleaned_data['name']
               emailFrom = form.cleaned_data['email']
               emailTo = settings.DEFAULT_FROM_EMAIL

               message = Mail(
                  from_email=emailFrom,
                  to_emails= emailTo ,
                  subject='subject',
                  html_content= settings.BASE_DIR + "/templates/placeorder.html")

               message.dynamic_template_data = 
                  'name': name,
                  'email': emailFrom ,
                  
               message.template_id = '********************************'
               try:
                     sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
                     response = sg.send(message)
                     messages.success(request, "Thanks, We received your Order message. We will get back to you!.")
                     OrderItem.delete(order)
               except Exception as e:
                       messages.warning(request, "Sorry, Order message not sent.Please Try Again!.")
         return render(request, "checkout.html", context)

【问题讨论】:

【参考方案1】:

您可以在动态模板中使用Handlebars.js 语法。

这里是 Sendgrid 中the documentation 的链接。

【讨论】:

以上是关于如何在我的 Sendgrid 事务模板中包含 Jinja2 模板的主要内容,如果未能解决你的问题,请参考以下文章

在我的 django 模板中包含 CSS 和 Javascript [重复]

如何将动态数据传递到sendgrid webapp上设计的电子邮件模板? : - | Sendgrid

如何在 Jinja2 模板中包含 HTML 文件?

如何在 Jade 模板中包含服务器端脚本?

SendGrid事务模板自定义参数c#

如何在 JWT 中包含身份角色声明?