Website Theme Install

website_theme_install
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/website_theme_install
VERSION
VERSION 1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Denis Ledoux, Christophe Simonis, Damien Bouvy, qsm-odoo, Romain Derie, RomainLibert, Adrian Torres, Xavier-Do, David Tran, Sébastien Theys, Naglis Jonaitis, Thanh Dodeur, fja-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
    - social_media
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
customize_modal customize_modal ir.ui.view qweb Inherits website.theme_customize
onboarding_website_theme_step onboarding_website_theme_step ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.website_theme_install res.config.settings Inherits website.res_config_settings_view_form
theme_view_kanban Themes Kanban ir.module.module kanban New
theme_view_search Themes Search ir.module.module search New
view_website_form_view_themes_modal website.form website Inherits website.view_website_form
website_theme_install_assets Website Theme Install Assets ir.ui.view qweb Inherits web.assets_backend
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (13)

New fields (2)
  • key Char
    copy=False
  • theme_template_id Many2one → theme.ir.attachment
    copy=False args: 'theme.ir.attachment'
Public methods (0)

No public methods.

New fields (2)
  • image_ids One2many → ir.attachment
    domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')] readonly=True string='Screenshots' args: 'ir.attachment', 'res_id'
  • is_installed_on_current_website Boolean
    compute='_compute_is_installed_on_current_website'
Public methods (5)
  • button_choose_theme(self)
    Remove any existing theme on the current website and install the theme ``self`` instead. The actual loading of the theme on the current website will be done automatically on ``write`` thanks to the upgrade and/or install. When installating a new theme, upgrade the upstream chain first to make sure we have the latest version of the dependencies to prevent inconsistencies. :return: dict with the next action to execute
  • button_refresh_theme(self)
    Refresh the current theme of the current website. To refresh it, we only need to upgrade the modules. Indeed the (re)loading of the theme will be done automatically on ``write``.
  • button_remove_theme(self)
    Remove the current theme of the current website.
  • update_list(self)
    @api.model
  • write(self, vals)
    Override to correctly upgrade themes after upgrade/installation of modules. # Install If this theme wasn't installed before, then load it for every website for which it is in the stream. eg. The very first installation of a theme on a website will trigger this. eg. If a website uses theme_A and we install sale, then theme_A_sale will be autoinstalled, and in this case we need to load theme_A_sale for the website. # Upgrade There are 2 cases to handle when upgrading a theme: * When clicking on the theme upgrade button on the interface, in which case there will be an http request made. -> We want to upgrade the current website only, not any other. * When upgrading with -u, in which case no request should be set. -> We want to upgrade every website using this theme.

New fields (1)
  • theme_template_id Many2one → theme.ir.ui.view
    copy=False args: 'theme.ir.ui.view'
Public methods (1)
  • write(self, vals)

New fields (1)
  • website_theme_onboarding_done Boolean
    compute='_compute_website_theme_onboarding_done' args: 'Onboarding website theme step done'
Public methods (1)
  • action_open_website_theme_selector(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • action_website_create_new(self)
  • install_theme_on_current_website(self)

New fields (4)
  • copy_ids One2many → ir.attachment
    copy=False readonly=True args: 'ir.attachment', 'theme_template_id', 'Attachment using a copy of me'
  • key Char
    required=True
  • name Char
    required=True
  • url Char
Public methods (0)

No public methods.

New fields (10)
  • active Boolean
    default=True
  • arch Text
    translate=xml_translate
  • arch_fs Char
    default=compute_arch_fs
  • copy_ids One2many → ir.ui.view
    copy=False readonly=True args: 'ir.ui.view', 'theme_template_id', 'Views using a copy of me'
  • inherit_id Reference
    selection=[('ir.ui.view', 'ir.ui.view'), ('theme.ir.ui.view', 'theme.ir.ui.view')]
  • key Char
  • mode Selection
    args: [('primary', 'Base view'), ('extension', 'Extension View')]
  • name Char
    required=True
  • priority Integer
    default=16 required=True
  • type Char
Public methods (1)
  • compute_arch_fs(self)

New fields (0)

No new fields.

Public methods (2)
  • disable_view(self, xml_id)
    @api.model
  • enable_view(self, xml_id)
    @api.model

New fields (7)
  • copy_ids One2many → website.menu
    copy=False readonly=True args: 'website.menu', 'theme_template_id', 'Menu using a copy of me'
  • name Char
    required=True translate=True
  • new_window Boolean
    args: 'New Window'
  • page_id Many2one → theme.website.page
    ondelete='cascade' args: 'theme.website.page'
  • parent_id Many2one → theme.website.menu
    index=True ondelete='cascade' args: 'theme.website.menu'
  • sequence Integer
  • url Char
    default=''
Public methods (0)

No public methods.

New fields (4)
  • copy_ids One2many → website.page
    copy=False readonly=True args: 'website.page', 'theme_template_id', 'Page using a copy of me'
  • url Char
  • view_id Many2one → theme.ir.ui.view
    ondelete='cascade' required=True args: 'theme.ir.ui.view'
  • website_indexed Boolean
    default=True args: 'Page Indexed'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_and_redirect_to_theme(self, vals)
    @api.model

New fields (1)
  • theme_template_id Many2one → theme.website.menu
    copy=False args: 'theme.website.menu'
Public methods (0)

No public methods.

New fields (1)
  • theme_template_id Many2one → theme.website.page
    copy=False args: 'theme.website.page'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/website_theme_install
VERSION
VERSION 1.0
CATEGORY
CATEGORYTechnical Settings
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Nicolas Martinelli, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Romain Derie, Xavier-Do, David Tran, Sébastien Theys, Quentin Smetz (qsm), Rémy Baranx (bar)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - social_media
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
customize_modal customize_modal ir.ui.view qweb Inherits website.theme_customize
onboarding_website_theme_step onboarding_website_theme_step ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.website_theme_install res.config.settings Inherits website.res_config_settings_view_form
theme_view_kanban Themes Kanban ir.module.module kanban New
theme_view_search Themes Search ir.module.module search New
view_website_form_view_themes_modal website.form website Inherits website.view_website_form
website_theme_install_assets Website Theme Install Assets ir.ui.view qweb Inherits web.assets_backend
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (13)

New fields (2)
  • key Char
    copy=False
  • theme_template_id Many2one → theme.ir.attachment
    copy=False args: 'theme.ir.attachment'
Public methods (0)

No public methods.

New fields (2)
  • image_ids One2many → ir.attachment
    domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')] readonly=True string='Screenshots' args: 'ir.attachment', 'res_id'
  • is_installed_on_current_website Boolean
    compute='_compute_is_installed_on_current_website'
Public methods (5)
  • button_choose_theme(self)
    @api.multi
    Remove any existing theme on the current website and install the theme ``self`` instead. The actual loading of the theme on the current website will be done automatically on ``write`` thanks to the upgrade and/or install. When installating a new theme, upgrade the upstream chain first to make sure we have the latest version of the dependencies to prevent inconsistencies. :return: dict with the next action to execute
  • button_refresh_theme(self)
    Refresh the current theme of the current website. To refresh it, we only need to upgrade the modules. Indeed the (re)loading of the theme will be done automatically on ``write``.
  • button_remove_theme(self)
    Remove the current theme of the current website.
  • update_list(self)
    @api.model
  • write(self, vals)
    @api.multi
    Override to correctly upgrade themes after upgrade/installation of modules. # Install If this theme wasn't installed before, then load it for every website for which it is in the stream. eg. The very first installation of a theme on a website will trigger this. eg. If a website uses theme_A and we install sale, then theme_A_sale will be autoinstalled, and in this case we need to load theme_A_sale for the website. # Upgrade There are 2 cases to handle when upgrading a theme: * When clicking on the theme upgrade button on the interface, in which case there will be an http request made. -> We want to upgrade the current website only, not any other. * When upgrading with -u, in which case no request should be set. -> We want to upgrade every website using this theme.

New fields (1)
  • theme_template_id Many2one → theme.ir.ui.view
    copy=False args: 'theme.ir.ui.view'
Public methods (0)

No public methods.

New fields (1)
  • website_theme_onboarding_done Boolean
    compute='_compute_website_theme_onboarding_done' args: 'Onboarding website theme step done'
Public methods (1)
  • action_open_website_theme_selector(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • action_website_create_new(self)
  • install_theme_on_current_website(self)

New fields (4)
  • copy_ids One2many → ir.attachment
    copy=False readonly=True args: 'ir.attachment', 'theme_template_id', 'Attachment using a copy of me'
  • key Char
    required=True
  • name Char
    required=True
  • url Char
Public methods (0)

No public methods.

New fields (10)
  • active Boolean
    default=True
  • arch Text
    translate=xml_translate
  • arch_fs Char
    default=compute_arch_fs
  • copy_ids One2many → ir.ui.view
    copy=False readonly=True args: 'ir.ui.view', 'theme_template_id', 'Views using a copy of me'
  • inherit_id Reference
    selection=[('ir.ui.view', 'ir.ui.view'), ('theme.ir.ui.view', 'theme.ir.ui.view')]
  • key Char
  • mode Selection
    args: [('primary', 'Base view'), ('extension', 'Extension View')]
  • name Char
    required=True
  • priority Integer
    default=16 required=True
  • type Char
Public methods (1)
  • compute_arch_fs(self)

New fields (0)

No new fields.

Public methods (2)
  • disable_view(self, xml_id)
    @api.model
  • enable_view(self, xml_id)
    @api.model

New fields (7)
  • copy_ids One2many → website.menu
    copy=False readonly=True args: 'website.menu', 'theme_template_id', 'Menu using a copy of me'
  • name Char
    required=True translate=True
  • new_window Boolean
    args: 'New Window'
  • page_id Many2one → theme.website.page
    ondelete='cascade' args: 'theme.website.page'
  • parent_id Many2one → theme.website.menu
    index=True ondelete='cascade' args: 'theme.website.menu'
  • sequence Integer
  • url Char
    default=''
Public methods (0)

No public methods.

New fields (4)
  • copy_ids One2many → website.page
    copy=False readonly=True args: 'website.page', 'theme_template_id', 'Page using a copy of me'
  • url Char
  • view_id Many2one → theme.ir.ui.view
    ondelete='cascade' required=True args: 'theme.ir.ui.view'
  • website_indexed Boolean
    default=True args: 'Page Indexed'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_and_redirect_to_theme(self, vals)
    @api.model

New fields (1)
  • theme_template_id Many2one → theme.website.menu
    copy=False args: 'theme.website.menu'
Public methods (0)

No public methods.

New fields (1)
  • theme_template_id Many2one → theme.website.page
    copy=False args: 'theme.website.page'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/website_theme_install
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, GitHub, Yannick Tivisse, qsm-odoo, Odoo Online, amoyaux
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Propose to install a theme on website installation

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
customize_modal customize_modal ir.ui.view qweb Inherits website.theme_customize
theme_view_kanban Themes Kanban ir.module.module kanban New
theme_view_search Themes Search ir.module.module search New
website_theme_install_assets Website Theme Install Assets ir.ui.view qweb Inherits web.assets_backend
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (1)

New fields (1)
  • image_ids One2many → ir.attachment
    domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')] readonly=True string='Screenshots' args: 'ir.attachment', 'res_id'
Public methods (2)
  • button_choose_theme(self)
    @api.multi
  • update_list(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/website_theme_install
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Yannick Tivisse, qsm-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Propose to install a theme on website installation

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
customize_modal customize_modal ir.ui.view qweb Inherits website.theme_customize
theme_view_kanban Themes Kanban ir.module.module kanban New
theme_view_search Themes Search ir.module.module search New
website_theme_install_assets Website Theme Install Assets ir.ui.view qweb Inherits web.assets_backend
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (1)

New fields (1)
  • image_ids One2many → ir.attachment
    domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')] readonly=True string='Screenshots' args: 'ir.attachment', 'res_id'
Public methods (2)
  • button_choose_theme(self)
    @api.multi
  • update_list(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/website_theme_install
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSNicolas Lempereur, Jérome Maes, Yannick Tivisse, qsm-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Propose to install a theme on website installation

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
theme_view_kanban Themes Kanban ir.module.module kanban New
theme_view_search Themes Search ir.module.module search New
website_theme_install_assets Website Theme Install Assets ir.ui.view qweb Inherits web.assets_backend
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (1)

New fields (1)
  • image_ids One2many → ir.attachment
    domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')] readonly=True string='Screenshots' args: 'ir.attachment', 'res_id'
Public methods (2)
  • button_choose_theme(self)
    @api.multi
  • update_list(self)
    @api.model