【问题标题】:odoo email template for sorted loop用于排序循环的 odoo 电子邮件模板
【发布时间】:2019-08-03 09:33:32
【问题描述】:

我需要在 odoo xml 模板中对订单行进行排序; 这是代码:

`<?xml version="1.0" ?>

    <!--Email template -->
    <record id="email_template_route_sale" model="email.template">
        <field name="name">Master Quote - Send by Email</field>
        <field name="email_from">${(object.salesperson_id2.email or object.user_id.email  or 'sales@chriscoffee.com')|safe}</field>
        <field name="subject">Chris' Coffee Service ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })</field>
        <field name="email_to">${(object.partner_id.email or '')|safe}</field>
        <field name="partner_to">${object.partner_id.id}</field>
        <field name="reply_to">catchall@chriscoffee.com, ${(object.salesperson_id2.email)}</field>
        <field name="model_id" ref="sale.model_sale_order"/>
        <field name="auto_delete" eval="False"/>
        <field name="report_name">${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
        <field name="lang">${object.partner_id.lang}</field>
        <field name="body_html"><![CDATA[

你好 ${object.partner_id.name},

<p>Here is your ${object.state in ('draft', 'sent') and 'order form' or 'order confirmation'} from ${object.company_id.name}:</p>

<p style="border-left: 1px solid #8e0000; margin-left: 30px;">
   &nbsp;&nbsp;<strong>REFERENCES</strong><br />
   &nbsp;&nbsp;Order number: <strong>${object.name}</strong><br />
   &nbsp;&nbsp;Order date: ${object.date_order}<br />
   % if object.user_id:
   &nbsp;&nbsp;Your contact: <a href="mailto:${object.salesperson_id2.email or ''}?subject=Order%20${object.name}">${object.salesperson_id2.name}</a>
   % endif
</p>
<br/>
<div style="width: 575px;">
    <div style="margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
       <h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
            <strong style="text-transform:uppercase;">Your items:</strong></h3>  
    </div>
<table width="575px">
  <tr>
    <td width="50%">Account #  ${object.partner_id.ref}</td>
    <td width="50%"></td>
  </tr>
  <tr>
    <td width="50%"><strong style="text-transform:uppercase;">${object.partner_id.display_name}</strong></td>
    <td width="50%"></td>
  </tr>
  <tr>
    <td width="50%">
        <span style="color: #222; margin-bottom: 5px; display: block; ">
        % if object.partner_id.street:
            ${object.partner_id.street}<br/>
        % endif
        % if object.partner_id.street2:
            ${object.partner_id.street2}<br/>
        % endif
        % if object.partner_id.city or object.partner_id.zip:
            ${object.partner_id.city}, ${object.partner_id.state_id.name} ${object.partner_id.zip}<br/>
        % endif
        % if object.partner_id.country_id:
            ${object.partner_id.state_id and ('%s, ' % object.partner_id.state_id.name) or ''} ${object.partner_id.country_id.name or ''}<br/>
        % endif
        </span>
        % if object.partner_id.phone:
            <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
                Phone:&nbsp; ${object.partner_id.phone}
            </div>
        % endif
        % if object.partner_id.website:
            <div>
                Web :&nbsp;<a href="${object.partner_id.website}">${object.partner_id.website}</a>
            </div>
        % endif
    </td>
    <td width="50%">
        <span style="color: #222; margin-bottom: 5px; display: block; ">
        % if object.partner_id.next_return_date:
            Delivery Date : ${object.partner_id.next_return_date}<br/>
        % endif
        % if object.driver_number.name:
            Driver/Route : ${object.driver_number.name} - ${object.timeslot_parent_id.name}<br/>
        % endif
        % if object.salesperson_id2:
            Inside Salesperson : ${object.salesperson_id2.name}<br/>
        % endif
         </span>
     </td>
  </tr>
</table>
<br/><br/>
<table style="width:575px;">
  <tr style="background-color:#c0c0c0;">
    <th width="10%" style="text-align: center;">QTY</th>
    <th width="70%" style="text-align: center;">Product</th>
    <th width="20%" style="text-align: center;">Case/Unit</th>
  </tr>
**% for line in sorted((object.order_line), key=lambda r: r['product_id.name']):**
  <tr>
    <td width="10%" style="text-align: center;" valign="middle">______  </td>
    <td width="70%">${line.product_id.name}</td>
    <td width="20%" style="text-align: center;">${line.product_uom.name}</td>
  </tr>
%endfor
</table><br/>
    <div style="margin: 0px; padding: 0px; background-color: #8E0000; border-bottom-left-radius: 5px 5px; border-bottom-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
       <h3 style="margin: 0px; padding: 5px 14px; font-size: 12px; color: #DDD;">
    </div>
<br/>

请尽快回复此电子邮件并填写所需数量。如果您有任何问题,请致电 518-452-5995 联系您的内部销售代表。

<p>Thank you for choosing Chris’ Coffee Service!</p>





        ]]></field>
    </record>
</data>

'

这是回溯:

'Traceback (most recent call last):

文件“/home/odoo/chris_odoo/odoo/addons/email_template/email_template.py”,第 193 行,在 render_template_batch 中 模板 = mako_template_env.from_string(tools.ustr(template)) 文件“/usr/lib/python2.7/dist-packages/jinja2/environment.py”,第 880 行,在 from_string return cls.from_code(self, self.compile(source), globals, None) 编译中的文件“/usr/lib/python2.7/dist-packages/jinja2/environment.py”,第 591 行 self.handle_exception(exc_info, source_hint=source_hint) 文件“/usr/lib/python2.7/dist-packages/jinja2/environment.py”,第 780 行,在 handle_exception 中 reraise(exc_type, exc_value, tb) 文件“”,第 78 行,在模板中 TemplateSyntaxError: 预期的标记 ',',得到了 'r'

【问题讨论】:

    标签: python xml python-2.7 odoo


    【解决方案1】:

    此模板中的错误是由于使用了通用 python 表达式(在这种情况下为 lambda 函数)。您不能在 Jinja2 模板中使用一般的 Python 表达式,就像在 Python 脚本中编写的那样。 Jinja2 支持有限数量的表达式,您只能使用模板中的表达式来应用逻辑。 for line in sorted((object.order_line), key=lambda r: r['product_id.name']): 是一个带有 lambda 函数的 python 表达式,它在 Jinja 语法中不受支持,这就是您收到此错误的原因。您必须在 Jinja2 支持的模板中转换此表达式,并在 python 文件中编写所需的附加功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2020-03-23
      • 1970-01-01
      相关资源
      最近更新 更多