Templates for email templates

email_template_template
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/10.0/email_template_template
VERSION
VERSION 1.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://therp.nl
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
If an organisation's email layout is a bit more
complicated, changes can be tedious when having to do that across several email
templates. So this addon allows to define templates for mails that is referenced
by other mail templates.
This way we can put the layout parts into the template template and only content
in the other templates. Changing the layout is then only a matter of changing
the template template.

-----
Usage
-----
Create an email template with the related document model 'Email Templates'. Now
most of the fields gray out and you can only edit body_text and body_html. Be
sure to use ${body_text} and ${body_html} respectively in your template
template.

Then select this newly created template templates in one of your actual
templates.

For example, create a template template

::

   Example Corp logo
   Example Corp header
   ${object.body_text} <- this gets evaluated to the body_text of a template using this template template
   Example Corp
   Example street 42
   Example city
   Example Corp footer

Then in your template you write

::

   Dear ${object.partner_id.name},

   Your order has been booked on date ${object.date} for a total amount of ${object.sum}.

And it will be evaluated to

::

    Example Corp logo
    Example Corp header
    Dear Jane Doe,

    Your order has been booked on date 04/17/2013 for a total amount of 42.
    Example Corp
    Example street 42
    Example city
    Example Corp footer

Given the way evaluation works internally (body_text of the template template
is evaluated two times, first with the instance of email.template of your own
template, then with the object your template refers to), you can do some
trickery if you know that a template template is always used with the same
kind of model (that is, models that have the same field name):

In your template template:

::

    Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the
    first step, then to the content of object.name
    ${object.body_html}
    Best,
    Example Corp

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
email_template_form email.template.form email.template data Inherits email_template.email_template_form
Models touched (1)

New fields (0)

No new fields.

Public methods (1)
  • get_email_template(self, cr, uid, template_id=False, record_id=None, context=None)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/9.0/email_template_template
VERSION
VERSION 1.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV
COMMITTERS
COMMITTERSStéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://therp.nl
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
If an organisation's email layout is a bit more
complicated, changes can be tedious when having to do that across several email
templates. So this addon allows to define templates for mails that is referenced
by other mail templates.
This way we can put the layout parts into the template template and only content
in the other templates. Changing the layout is then only a matter of changing
the template template.

-----
Usage
-----
Create an email template with the related document model 'Email Templates'. Now
most of the fields gray out and you can only edit body_text and body_html. Be
sure to use ${body_text} and ${body_html} respectively in your template
template.

Then select this newly created template templates in one of your actual
templates.

For example, create a template template

::

   Example Corp logo
   Example Corp header
   ${object.body_text} <- this gets evaluated to the body_text of a template using this template template
   Example Corp
   Example street 42
   Example city
   Example Corp footer

Then in your template you write

::

   Dear ${object.partner_id.name},

   Your order has been booked on date ${object.date} for a total amount of ${object.sum}.

And it will be evaluated to

::

    Example Corp logo
    Example Corp header
    Dear Jane Doe,

    Your order has been booked on date 04/17/2013 for a total amount of 42.
    Example Corp
    Example street 42
    Example city
    Example Corp footer

Given the way evaluation works internally (body_text of the template template
is evaluated two times, first with the instance of email.template of your own
template, then with the object your template refers to), you can do some
trickery if you know that a template template is always used with the same
kind of model (that is, models that have the same field name):

In your template template:

::

    Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the
    first step, then to the content of object.name
    ${object.body_html}
    Best,
    Example Corp

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
email_template_form email.template.form email.template data Inherits email_template.email_template_form
Models touched (1)

New fields (0)

No new fields.

Public methods (1)
  • get_email_template(self, cr, uid, template_id=False, record_id=None, context=None)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/8.0/email_template_template
VERSION
VERSION 1.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV
COMMITTERS
COMMITTERSStéphane Bidoul, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://therp.nl
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - email_template
    - mail
    - base
    - base_setup
    - web_kanban
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
If an organisation's email layout is a bit more
complicated, changes can be tedious when having to do that across several email
templates. So this addon allows to define templates for mails that is referenced
by other mail templates.
This way we can put the layout parts into the template template and only content
in the other templates. Changing the layout is then only a matter of changing
the template template.

-----
Usage
-----
Create an email template with the related document model 'Email Templates'. Now
most of the fields gray out and you can only edit body_text and body_html. Be
sure to use ${body_text} and ${body_html} respectively in your template
template.

Then select this newly created template templates in one of your actual
templates.

For example, create a template template

::

   Example Corp logo
   Example Corp header
   ${object.body_text} <- this gets evaluated to the body_text of a template using this template template
   Example Corp
   Example street 42
   Example city
   Example Corp footer

Then in your template you write

::

   Dear ${object.partner_id.name},

   Your order has been booked on date ${object.date} for a total amount of ${object.sum}.

And it will be evaluated to

::

    Example Corp logo
    Example Corp header
    Dear Jane Doe,

    Your order has been booked on date 04/17/2013 for a total amount of 42.
    Example Corp
    Example street 42
    Example city
    Example Corp footer

Given the way evaluation works internally (body_text of the template template
is evaluated two times, first with the instance of email.template of your own
template, then with the object your template refers to), you can do some
trickery if you know that a template template is always used with the same
kind of model (that is, models that have the same field name):

In your template template:

::

    Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the
    first step, then to the content of object.name
    ${object.body_html}
    Best,
    Example Corp

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
email_template_form email.template.form email.template data Inherits email_template.email_template_form
Models touched (1)

New fields (0)

No new fields.

Public methods (1)
  • get_email_template(self, cr, uid, template_id=False, record_id=None, context=None)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/7.0/email_template_template
VERSION
VERSION 1.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV
COMMITTERS
COMMITTERSYannick Vaucher, Alexandre Fayolle, Sandy Carter, Holger Brunn, Sylvain LE GAL, Jose Morales
WEBSITE
WEBSITEhttp://therp.nl
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - email_template
    - mail
    - base
    - base_setup
    - web_kanban
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
If an organisation's email layout is a bit more
complicated, changes can be tedious when having to do that across several email
templates. So this addon allows to define templates for mails that is
referenced by other mail templates.

This way we can put the layout parts into the template template and only
content in the other templates. Changing the layout is then only a matter of
changing the template template.

-----
Usage
-----
Create an email template with the related document model 'Email Templates'. Now
most of the fields gray out and you can only edit body_text and body_html. Be
sure to use ${body_text} and ${body_html} respectively in your template
template.

Then select this newly created template templates in one of your actual
templates.

For example, create a template template

::

   Example Corp logo
   Example Corp header
   ${object.body_text} <- this gets evaluated to the body_text of a
                          template using this template template
   Example Corp
   Example street 42
   Example city
   Example Corp footer

Then in your template you write

::

   Dear ${object.partner_id.name},

   Your order has been booked on date ${object.date}
   for a total amount of ${object.sum}.

And it will be evaluated to

::

    Example Corp logo
    Example Corp header
    Dear Jane Doe,

    Your order has been booked on date 04/17/2013
    for a total amount of 42.
    Example Corp
    Example street 42
    Example city
    Example Corp footer

Given the way evaluation works internally (body_text of the template template
is evaluated two times, first with the instance of email.template of your own
template, then with the object your template refers to), you can do some
trickery if you know that a template template is always used with the same kind
of model (that is, models that have the same field name):

In your template template:

::

    Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the
    first step, then to the content of object.name
    ${object.body_html}
    Best,
    Example Corp

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
email_template_form email.template.form email.template data Inherits email_template.email_template_form
Models touched (1)

New fields (0)

No new fields.

Public methods (1)
  • get_email_template(self, cr, uid, template_id=False, record_id=None, context=None)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/6.1/email_template_template
VERSION
VERSION 1.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV
COMMITTERS
COMMITTERSAlexandre Fayolle, Holger Brunn
WEBSITE
WEBSITEhttp://therp.nl
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - email_template
    - mail
    - base
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
If an organisation's email layout is a bit more
complicated, changes can be tedious when having to do that across several email
templates. So this addon allows to define templates for mails that is
referenced by other mail templates.
This way we can put the layout parts into the template template and only
content in the other templates. Changing the layout is then only a matter of
changing the template template.


Usage:
Create an email template with the related document model 'Email Templates'. Now
most of the fields gray out and you can only edit body_text and body_html. Be
sure to use ${body_text} and ${body_html} respectively in your template
template.

Then select this newly created template templates in one of your actual
templates.

For example, create a template template
-----
Example Corp logo
Example Corp header
${object.body_text} <- this gets evaluated to the body_text of a template using
    this template template
Example Corp
Example street 42
Example city
Example Corp footer
-----

Then in your template you write

-----
Dear ${object.partner_id.name},

Your order has been booked on date ${object.date} for a total amount of
${object.sum}.
-----

And it will be evaluated to

-----
Example Corp logo
Example Corp header
Dear Jane Doe,

Your order has been booked on date 04/17/2013 for a total amount of 42.
Example Corp
Example street 42
Example city
Example Corp footer
-----

Given the way evaluation works internally (body_text of the template template
is evaluated two times, first with the instance of email.template of your own
template, then with the object your template refers to), you can do some
trickery if you know that a template template is always used with the same kind
of model (that is, models that have the same field name):

In your template template:

------
Dear ${'${object.name}'}, <-- gets evaluated to "${object.name}" in the first
    step, then to the content of object.name
${object.body_html}
Best,
Example Corp
------

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
email_template_form email.template.form email.template data Inherits email_template.email_template_form
Models touched (1)

New fields (0)

No new fields.

Public methods (1)
  • get_email_template(self, cr, uid, template_id=False, record_id=None, context=None)