Blog

website_blog
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/website_blog
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Mohammed Shekha, Nicolas Lempereur, Géry Debongnie, Aaron Bohy, qsm-odoo, Julien Castiaux, Xavier-Do, Sébastien Theys, Julien Mougenot, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Benjamin Vray, Nicolas Bayet, Hubert Van De Walle, luvi, Moises Lopez - https://www.vauxoo.com/, Victor Piryns (pivi), Robin Lejeune (role), Louis (loco), Dylan Kiss (dyki), Brieuc-brd, divy-odoo, visp-odoo, Maryam Kia, Mehdi Outagant (MOU), Serge Bayet (seba), Julien Carion (juca), Chrysanthe (chgo), Junqi Wu, mano-odoo, Sanjay Sharma, paru-odoo, Sébastien (blse), khsr-odoo, Pierre Pulinckx, Bastien PIERRE, Krzysztof Magusiak (krma), aans-odoo, rusp-odoo, Davide Bonetto, Alessandro Lupo, Augustin (duau), Serhii Rubanskyi, Benoit Socias (bso), Serge Bayet, saurabh, vega-odoo, chpa-odoo, panj-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/blog
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - html_builder
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (85)
XML IDNameModelTypeStatus
blog_blog_view_search blog.blog.search blog.blog search New
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_info Blog Post Info ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_form_add blog.post.view.form.add blog.post form New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category.list blog.tag.category list New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag.list blog.tag list New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
dynamic_filter_template_blog_post_big_picture Big picture ir.ui.view qweb New
dynamic_filter_template_blog_post_card Card ir.ui.view qweb New
dynamic_filter_template_blog_post_horizontal Horizontal ir.ui.view qweb New
dynamic_filter_template_blog_post_list List ir.ui.view qweb New
dynamic_filter_template_blog_post_single_aside Solo Aside ir.ui.view qweb New
dynamic_filter_template_blog_post_single_badge Solo Badge ir.ui.view qweb New
dynamic_filter_template_blog_post_single_circle Solo Circle ir.ui.view qweb New
dynamic_filter_template_blog_post_single_full Solo Full ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_blog_posts Blog Posts ir.ui.view qweb New
s_blog_posts_big_picture Blog Posts Big Picture ir.ui.view qweb New
s_blog_posts_card Blog Posts Card ir.ui.view qweb New
s_blog_posts_horizontal Blog Posts Horizontal ir.ui.view qweb New
s_blog_posts_list Blog Posts List ir.ui.view qweb New
s_blog_posts_single_aside Single Blog Post Aside ir.ui.view qweb New
s_blog_posts_single_badge Single Blog Post Badge ir.ui.view qweb New
s_blog_posts_single_circle Single Blog Post Circle ir.ui.view qweb New
s_blog_posts_single_full Single Blog Post Full ir.ui.view qweb New
s_dynamic_snippet_blog_posts_card_preview_data Blogs Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_horizontal_preview_data Blogs Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_list_preview_data Blogs Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_preview_data Blogs Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_single_aside_preview_data Single Blog Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_single_badge_preview_data Single Blog Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_single_circle_preview_data Single Blog Preview Data ir.ui.view qweb New
s_dynamic_snippet_blog_posts_single_full_preview_data Single Blog Preview Data ir.ui.view qweb New
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
tags_list Tags List ir.ui.view qweb New
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog list New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list Blog Post Pages List blog.post list New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_author Blog Post Author ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_category Blog Post Category ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_date Blog Post Date ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_teaser Blog Post Teaser ir.ui.view qweb New
Models touched (6)

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> index='btree_not_null' args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    default=<expr> index=True ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' translate=True args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content' translate=True
  • visits Integer
    copy=False default=0 readonly=True args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • color Integer
    args: 'Color'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • configurator_set_menu_links(self, menu_company, module_data)
  • get_suggested_controllers(self)

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/website_blog
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Christophe Simonis, Xavier Morel, Nicolas Lempereur, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Odoo Online, Pierre Masereel, Romain Derie, Jorge Pinna Puissant, Xavier-Do, Sébastien Theys, Tiffany Chang (tic), Gorash, Benjamin Vray, Benoit Socias, Hubert Van De Walle, Vincent Larcin, Louis Wicket (wil), Soukéina Bojabza, Robin Lejeune (role), Louis (loco), Dylan Kiss (dyki), divy-odoo, AH-Yussef, omra-odoo, Maryam Kia, Mehdi Outagant (MOU), Guillaume-gdi, Serge Bayet (seba), Chrysanthe (chgo), Louis (wil), Junqi Wu, mano-odoo, Sanjay Sharma, Xavier Luyckx (xlu), Antoine (anso), paru-odoo, Pierre Pulinckx (PIPU), khsr-odoo, Pierre Pulinckx (pipu), Pierre Pulinckx, Bastien PIERRE, Krzysztof Magusiak (krma), Davide Bonetto, Serge Bayet, saurabh, vega-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/blog
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:52
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (70)
XML IDNameModelTypeStatus
blog_blog_view_search blog.blog.search blog.blog search New
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_form_add blog.post.view.form.add blog.post form New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_searchbar_input_snippet_options blog search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category.list blog.tag.category list New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag.list blog.tag list New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
dynamic_filter_template_blog_post_big_picture Big picture ir.ui.view qweb New
dynamic_filter_template_blog_post_card Card ir.ui.view qweb New
dynamic_filter_template_blog_post_horizontal Horizontal ir.ui.view qweb New
dynamic_filter_template_blog_post_list List ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_blog_posts Blog Posts ir.ui.view qweb New
s_blog_posts_options s_blog_posts_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_blog_posts_preview_data Blogs Preview Data ir.ui.view qweb New
s_dynamic_snippet_options_template s_dynamic_snippet_options_template ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
snippet_options Blog snippet options ir.ui.view qweb Inherits website.snippet_options
tags_list Tags List ir.ui.view qweb New
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog list New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list Blog Post Pages List blog.post list New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_author Blog Post Author ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_date Blog Post Date ir.ui.view qweb New
website_blog.s_dynamic_snippet_template_teaser Blog Post Teaser ir.ui.view qweb New
Models touched (6)

New fields (6)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> index='btree_not_null' args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    default=<expr> ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' translate=True args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content' translate=True
  • visits Integer
    copy=False default=0 readonly=True args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • color Integer
    args: 'Color'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (1)
  • write(self, *args, **kwargs)

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • configurator_set_menu_links(self, menu_company, module_data)
  • get_suggested_controllers(self)

New fields (0)

No new fields.

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/17.0/website_blog
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Odoo Online, Pierre Masereel, Romain Derie, Xavier-Do, Joseph Caburnay, Samuel Degueldre, Alvaro Fuentes, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, Benjamin Vray, Benoit Socias, Guillaume (gdi), Arthur Detroux (ard), Nicolas Bayet, luvi, niyasraphy, Louis Wicket (wil), Soukéina Bojabza, Louis (loco), Dylan Kiss (dyki), Michael (mcm), Hugo Carlier (Huca), Brieuc-brd, divy-odoo, AH-Yussef, Guillaume-gdi, Louis (wil), Junqi Wu, Severin Zumbrunn, mano-odoo, Sanjay Sharma, paru-odoo, Jonathan Castillo (jcs), Pierre Pulinckx (pipu), Bastien PIERRE, pish-odoo, Pulinckx Pierre (PIPU)
WEBSITE
WEBSITEhttps://www.odoo.com/app/blog
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (66)
XML IDNameModelTypeStatus
blog_blog_view_search blog.blog.search blog.blog search New
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_form_add blog.post.view.form.add blog.post form New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_searchbar_input_snippet_options blog search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
dynamic_filter_template_blog_post_big_picture Big picture layout ir.ui.view qweb New
dynamic_filter_template_blog_post_card Card layout ir.ui.view qweb New
dynamic_filter_template_blog_post_horizontal Horizontal layout ir.ui.view qweb New
dynamic_filter_template_blog_post_list List layout ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_blog_posts Blog Posts ir.ui.view qweb New
s_blog_posts_options s_blog_posts_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_options_template s_dynamic_snippet_options_template ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
snippet_options Blog snippet options ir.ui.view qweb Inherits website.snippet_options
tags_list Tags List ir.ui.view qweb New
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list Blog Post Pages Tree blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
Models touched (7)

New fields (6)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> index='btree_not_null' args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    default=<expr> ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False default=0 readonly=True args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • copy_data(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • attributes(self, record, field_name, options, values)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • configurator_set_menu_links(self, menu_company, module_data)
  • get_suggested_controllers(self)

New fields (0)

No new fields.

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/16.0/website_blog
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Nicolas Lempereur, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Romain Derie, Julien Castiaux, Romeo Fragomeli, Victor Feyens, Alvaro Fuentes, std-odoo, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Benjamin Vray, Benoit Socias, Guillaume (gdi), Arthur Detroux (ard), Florian Charlier, Yolann Sabaux, Swapnesh, Nicolas Bayet, luvi, niyasraphy, Louis Wicket (wil), Soukéina Bojabza, Louis (loco), Chong Wang (cwg), divy-odoo, Nguyễn Đại Dương, AH-Yussef, Martin Trigaux (mat), Junqi Wu, Severin Zumbrunn, mano-odoo, Sanjay Sharma
WEBSITE
WEBSITEhttps://www.odoo.com/app/blog
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (66)
XML IDNameModelTypeStatus
blog_blog_view_search blog.blog.search blog.blog search New
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_form_add blog.post.view.form.add blog.post form New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_searchbar_input_snippet_options blog search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
dynamic_filter_template_blog_post_big_picture Big picture layout ir.ui.view qweb New
dynamic_filter_template_blog_post_card Card layout ir.ui.view qweb New
dynamic_filter_template_blog_post_horizontal Horizontal layout ir.ui.view qweb New
dynamic_filter_template_blog_post_list List layout ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_blog_posts Blog Posts ir.ui.view qweb New
s_blog_posts_options s_blog_posts_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_options_template s_dynamic_snippet_options_template ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
snippet_options Blog snippet options ir.ui.view qweb Inherits website.snippet_options
tags_list Tags List ir.ui.view qweb New
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list Blog Post Pages Tree blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
Models touched (7)

New fields (6)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    default=<expr> ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False default=0 readonly=True args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • copy_data(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • attributes(self, record, field_name, options, values)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • configurator_set_menu_links(self, menu_company, module_data)
  • get_suggested_controllers(self)

New fields (0)

No new fields.

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/15.0/website_blog
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, David Monjoie, Xavier Morel, Goffin Simon, Aaron Bohy, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Romain Derie, Xavier-Do, Nasreddin (bon), Julien Mougenot, Samuel Degueldre, Alvaro Fuentes, Touati Djamel (otd), Tiffany Chang (tic), Kamen Zhekov, Benjamin Vray, roen-odoo, Benoit Socias, Guillaume (gdi), Yolann Sabaux, Goaman, Nicolas Bayet, Siddarth Gajjar, Soukéina Bojabza, Louis (loco), divy-odoo, Nguyễn Đại Dương, AH-Yussef, Leonardo Pavan Rocha
WEBSITE
WEBSITEhttps://www.odoo.com/app/blog
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (67)
XML IDNameModelTypeStatus
blog_blog_view_search blog.blog.search blog.blog search New
blog_edit_options Edit Blog Options ir.ui.view qweb Inherits website.user_navbar
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_searchbar_input_snippet_options blog search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
dynamic_filter_template_blog_post_big_picture Big picture layout ir.ui.view qweb New
dynamic_filter_template_blog_post_card Card layout ir.ui.view qweb New
dynamic_filter_template_blog_post_horizontal Horizontal layout ir.ui.view qweb New
dynamic_filter_template_blog_post_list List layout ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_blog_posts Blog Posts ir.ui.view qweb New
s_blog_posts_options s_blog_posts_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_options_template s_dynamic_snippet_options_template ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
snippet_options Blog snippet options ir.ui.view qweb Inherits website.snippet_options
tags_list Tags List ir.ui.view qweb New
user_navbar_inherit_website_blog user_navbar_inherit_website_blog ir.ui.view qweb Inherits website.user_navbar
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
Models touched (6)

New fields (6)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False default=0 args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    index=True readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (4)
  • copy_data(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • write(self, vals)

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • configurator_set_menu_links(self, menu_company, module_data)
  • get_suggested_controllers(self)
  • page_search_dependencies(self, page_id=False)
    @api.model
  • page_search_key_dependencies(self, page_id=False)
    @api.model

New fields (0)

No new fields.

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/14.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, GitHub, Barad Mahendra, Yannick Tivisse, qsm-odoo, Nicolas Seinlet, Romain Derie, Adrien Dieudonne, Toufik Ben Jaa, Adrian Torres, wan, Xavier-Do, jvm-odoo, Paul Morelle, Sébastien Theys, Nasreddin (bon), Jason Van Malder, fw-bot, Samuel Degueldre, std-odoo, Touati Djamel (otd), fja-odoo, Kevin Baptiste, Benjamin Vray, Benoit Socias, Guillaume (gdi), Laurent Stukkens (LTU), Okan SUMER (osu), Francois (fge)
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (71)
XML IDNameModelTypeStatus
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
assets_snippet_s_latest_posts_css_000 assets_snippet_s_latest_posts_css_000 ir.ui.view qweb Inherits website.assets_frontend
assets_snippet_s_latest_posts_css_001 assets_snippet_s_latest_posts_css_001 ir.ui.view qweb Inherits website.assets_frontend
assets_snippet_s_latest_posts_js_000 assets_snippet_s_latest_posts_js_000 ir.ui.view qweb Inherits website.assets_frontend
assets_wysiwyg Blog posts snippet options ir.ui.view qweb Inherits website.assets_wysiwyg
blog_blog_view_search blog.blog.search blog.blog search New
blog_edit_options Edit Blog Options ir.ui.view qweb Inherits website.user_navbar
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_latest_posts Blog Posts ir.ui.view qweb New
s_latest_posts_big_picture_template s_latest_posts_big_picture_template ir.ui.view qweb New
s_latest_posts_card_template s_latest_posts_card_template ir.ui.view qweb New
s_latest_posts_horizontal_template s_latest_posts_horizontal_template ir.ui.view qweb New
s_latest_posts_list_template s_latest_posts_list_template ir.ui.view qweb New
s_latest_posts_options s_latest_posts_options ir.ui.view qweb Inherits website.snippet_options
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
snippet_options Blog snippet options ir.ui.view qweb Inherits website.snippet_options
tags_list Tags List ir.ui.view qweb New
user_navbar_inherit_website_blog user_navbar_inherit_website_blog ir.ui.view qweb Inherits website.user_navbar
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
Models touched (5)

New fields (6)
  • active Boolean
    default=True args: 'Active'
  • blog_post_count Integer
    compute='_compute_blog_post_count' args: 'Posts'
  • blog_post_ids One2many → blog.post
    args: 'blog.post', 'blog_id', 'Blog Posts'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype_id=False, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • author_name Char
    readonly=False related='author_id.display_name' store=True string='Author Name'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False default=0 args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id' store=True
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    index=True readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (4)
  • copy_data(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • write(self, vals)

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • get_suggested_controllers(self)
  • page_search_dependencies(self, page_id=False)
    @api.model
  • page_search_key_dependencies(self, page_id=False)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Thibault Delavallée, Christophe Simonis, David Monjoie, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Nicolas Seinlet, Romain Derie, Jorge Pinna Puissant, Nans Lefebvre, Toufik Ben Jaa, Adrian Torres, Xavier-Do, jvm-odoo, Paul Morelle, Sébastien Theys, Jason Van Malder, fw-bot, Samuel Degueldre, std-odoo, Touati Djamel (otd), Thanh Dodeur, Parth Choksi, Yenthe666, Benoit Socias, Oussama MESSAOUDI
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
    - social_media
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (66)
XML IDNameModelTypeStatus
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
blog_blog_view_search blog.blog.search blog.blog search New
blog_edit_options Edit Blog Options ir.ui.view qweb Inherits website.user_navbar
blog_feed blog_feed ir.ui.view qweb New
blog_post_content Blog post content ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_sidebar Sidebar - Blog Post ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
blogs_nav Blogs Bar Template ir.ui.view qweb New
date_selector date_selector ir.ui.view qweb New
index Blog Navigation ir.ui.view qweb New
opt_blog_cards_design 'Cards' Design ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post Top banner - Name / Latest Post ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_cover_post_fullwidth_design Full-Width Cover ir.ui.view qweb Inherits website_blog.opt_blog_cover_post
opt_blog_list_view List View ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_archive_display Archive ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_author_avatar_display Author ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_blogs_display Blogs List ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_breadcrumb Show Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_comment Allow Comments ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_read_next Read Next Article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_regular_cover 'Regular' Cover ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_comment Select to Comment ir.ui.view qweb Inherits website_blog.opt_blog_post_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_share_links_display Share Links ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_post_sidebar Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_tags_display Tags ir.ui.view qweb Inherits website_blog.blog_post_sidebar
opt_blog_readable Increase Readability ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_sidebar_show Show Sidebar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_posts_loop_show_author Author ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_cover Cover ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_stats Comments/Views Stats ir.ui.view qweb Inherits website_blog.posts_loop
opt_posts_loop_show_teaser Teaser & Tags ir.ui.view qweb Inherits website_blog.posts_loop
opt_sidebar_blog_index_archives Archives ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_follow_us Follow Us ir.ui.view qweb Inherits website_blog.sidebar_blog_index
opt_sidebar_blog_index_tags Tags List ir.ui.view qweb Inherits website_blog.sidebar_blog_index
post_author post_author ir.ui.view qweb New
post_breadcrumbs post_breadcrumbs ir.ui.view qweb New
post_cover_image post_cover_image ir.ui.view qweb New
post_heading post_heading ir.ui.view qweb New
post_info post_info ir.ui.view qweb New
post_teaser post_teaser ir.ui.view qweb New
posts_loop Posts List ir.ui.view qweb New
s_latest_posts Latest Posts - List ir.ui.view qweb New
s_latest_posts_big_picture Latest Posts - Big Images ir.ui.view qweb New
s_latest_posts_big_picture_template s_latest_posts_big_picture_template ir.ui.view qweb New
s_latest_posts_list_template s_latest_posts_list_template ir.ui.view qweb New
s_latest_posts_options s_latest_posts_options ir.ui.view qweb Inherits website.snippet_options
sidebar_blog_index Sidebar - Blog page ir.ui.view qweb New
tags_list Tags List ir.ui.view qweb New
user_navbar_inherit_website_blog user_navbar_inherit_website_blog ir.ui.view qweb Inherits website.user_navbar
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
website_blog.blog_post_complete Blog Post ir.ui.view qweb New
Models touched (5)

New fields (5)
  • active Boolean
    default=True args: 'Active'
  • content Html
    sanitize=False translate=html_translate args: 'Content'
  • cover_properties Text
    default='{"background-image": "none", "background-color": "oe_black", "opacity": "0.2", "resize_class": "cover_mid"}' args: 'Cover Properties'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, join=False, min_limit=1)
  • message_post(self, *, parent_id=False, subtype=None, **kwargs)
    @api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_128' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • cover_properties Text
    default='{"background-image": "none", "background-color": "oe_black", "opacity": "0.2", "resize_class": "cover_mid"}' args: 'Cover Properties'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id'
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    index=True readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • create(self, vals)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • write(self, vals)

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • page_search_dependencies(self, page_id=False)
    @api.model
  • page_search_key_dependencies(self, page_id=False)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Joren Van Onder, Nicolas Martinelli, Nicolas Lempereur, Jeremy Kersten, GitHub, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Romain Derie, Christophe Monniez, Adrian Torres, Julien Castiaux, Xavier-Do, Florimond Husquinet (fhu), Sébastien Theys, Jason Van Malder, fw-bot, Samuel Degueldre, std-odoo, Kinjal Mehta, Quentin Smetz (qsm)
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - social_media
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (46)
XML IDNameModelTypeStatus
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
blog_blog_view_search blog.blog.search blog.blog search New
blog_breadcrumb Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
blog_cover blog_cover ir.ui.view qweb New
blog_edit_options Edit Blog Options ir.ui.view qweb Inherits website.user_navbar
blog_feed blog_feed ir.ui.view qweb New
blog_post_complete Blog Post ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_post_view_kanban blog.post.kanban blog.post kanban New
blog_tag_category_form blog_tag_category_form blog.tag.category form New
blog_tag_category_tree blog_tag_category_tree blog.tag.category tree New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
index Blog Navigation ir.ui.view qweb New
index_right Right Column ir.ui.view qweb Inherits website_blog.blog_post_short
latest_blogs Latest Blogs ir.ui.view qweb New
opt_blog_post_author_avatar Author avatar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_author_avatar_display Author Avatar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_comment Allow blog post comment ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_read_next Read next article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_cover_image Cover image ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_grid_layout Grid view ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_select_to_comment Select to comment ir.ui.view qweb Inherits website_blog.opt_blog_post_complete_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_rc_about_us About Us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_blogs Our Blogs ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_follow_us Subscription ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_history Archives ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_status Status ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_tags Tags ir.ui.view qweb Inherits website_blog.index_right
s_latest_posts Latest Posts - List ir.ui.view qweb New
s_latest_posts_big_picture Latest Posts - Big Images ir.ui.view qweb New
s_latest_posts_big_picture_template s_latest_posts_big_picture_template ir.ui.view qweb New
s_latest_posts_list_template s_latest_posts_list_template ir.ui.view qweb New
s_latest_posts_options s_latest_posts_options ir.ui.view qweb Inherits website.snippet_options
tag_category Tags List ir.ui.view qweb New
user_navbar_inherit_website_blog user_navbar_inherit_website_blog ir.ui.view qweb Inherits website.user_navbar
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
Models touched (5)

New fields (3)
  • active Boolean
    default=True args: 'Active'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, min_limit=1)
    @api.multi
  • message_post(self, parent_id=False, subtype=None, **kwargs)
    @api.multi@api.returns('mail.message', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)
    @api.multi

New fields (21)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    readonly=False related='author_id.image_small' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • cover_properties Text
    default='{"background-image": "none", "background-color": "oe_black", "opacity": "0.2", "resize_class": ""}' args: 'Cover Properties'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • ranking Float
    compute='_compute_ranking' string='Ranking'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False args: 'No of Views'
  • website_id Many2one
    readonly=True related='blog_id.website_id'
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    index=True readonly=True args: 'Last Updated on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (3)
  • create(self, vals)
    @api.model
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • write(self, vals)
    @api.multi

New fields (3)
  • category_id Many2one → blog.tag.category
    index=True args: 'blog.tag.category', 'Category'
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • tag_ids One2many → blog.tag
    string='Tags' args: 'blog.tag', 'category_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • page_search_dependencies(self, page_id=False)
    @api.model
  • page_search_key_dependencies(self, page_id=False)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Nicolas Lempereur, Jérome Maes, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Odoo Online, rde, jvm-odoo, Thomas Dieuzeide, Andreas Perhab
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - web
    - base
    - web_editor
    - web_planner
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (37)
XML IDNameModelTypeStatus
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
blog_blog_view_search blog.blog.search blog.blog search New
blog_breadcrumb Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
blog_cover blog_cover ir.ui.view qweb New
blog_edit_options Edit Blog Options ir.ui.view qweb Inherits website.user_navbar
blog_feed blog_feed ir.ui.view qweb New
blog_post_complete Blog Post ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
content_new_blogpost content_new_blogpost ir.ui.view qweb Inherits website.user_navbar
header_footer_custom Footer News Blog Link ir.ui.view qweb Inherits website.footer_default
index Blog Navigation ir.ui.view qweb New
index_right Right Column ir.ui.view qweb Inherits website_blog.blog_post_short
latest_blogs Latest Blogs ir.ui.view qweb New
opt_blog_post_author_avatar Author avatar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_author_avatar_display Author Avatar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_comment Allow blog post comment ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_read_next Read next article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_cover_image Cover image ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_grid_layout Grid view ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_select_to_comment Select to comment ir.ui.view qweb Inherits website_blog.opt_blog_post_complete_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_rc_about_us About Us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_blogs Our Blogs ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_follow_us Subscription ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_history Archives ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_status Status ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_tags Tags ir.ui.view qweb Inherits website_blog.index_right
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
Models touched (5)

New fields (3)
  • active Boolean
    default=True args: 'Active'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, min_limit=1)
    @api.multi
  • message_post(self, parent_id=False, subtype=None, **kwargs)
    @api.multi@api.returns('self', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)
    @api.multi

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    related='author_id.image_small' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • cover_properties Text
    default='{"background-image": "none", "background-color": "oe_black", "opacity": "0.2", "resize_class": ""}' args: 'Cover Properties'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' help='The blog post will be visible for your visitors as of this date on the website if it is set as published.' inverse='_set_post_date' store=True args: 'Publishing date'
  • published_date Datetime
    args: 'Published Date'
  • ranking Float
    compute='_compute_ranking' string='Ranking'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False args: 'No of Views'
  • website_message_ids One2many
    domain=<expr>
  • write_date Datetime
    index=True readonly=True args: 'Last Modified on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • message_get_message_notify_values(self, message, message_values)
    @api.multi
    Override to avoid keeping all notified recipients of a comment. We avoid tracking needaction on post comments. Only emails should be sufficient.
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (1)
  • path Char
    help='Used to display messages in a paragraph-based chatter using a unique path;' index=True args: 'Discussion Path'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • page_search_dependencies(self, page_id=False)
    @api.model
  • page_search_key_dependencies(self, page_id=False)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Simon Lejeune, Nicolas Lempereur, Jérome Maes, Julien Legros, qdp-odoo, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Martin Geubelle, Romain Derie, Jairo Llopis
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - web
    - base
    - web_editor
    - web_planner
    - mail
    - base_setup
    - web_kanban
    - bus
    - web_tour
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Odoo Blog
============

        

Code Analysis

Views touched (36)
XML IDNameModelTypeStatus
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
blog_blog_view_search blog.blog.search blog.blog search New
blog_breadcrumb Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
blog_cover blog_cover ir.ui.view qweb New
blog_feed blog_feed ir.ui.view qweb New
blog_post_complete Blog Post ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_post_template_new_post blog_post_template_new_post ir.ui.view qweb New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
content_new_blogpost content_new_blogpost ir.ui.view qweb Inherits website.user_navbar
header_footer_custom Footer News Blog Link ir.ui.view qweb Inherits website.footer_default
index Blog Navigation ir.ui.view qweb New
index_right Right Column ir.ui.view qweb Inherits website_blog.blog_post_short
latest_blogs Latest Blogs ir.ui.view qweb New
opt_blog_post_author_avatar Author avatar ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_author_avatar_display Author Avatar ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_comment Allow blog post comment ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_read_next Read next article ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_cover_image Cover image ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_grid_layout Grid view ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_post_select_to_comment Select to comment ir.ui.view qweb Inherits website_blog.opt_blog_post_complete_comment
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_rc_about_us About Us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_blogs Our Blogs ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_follow_us Subscription ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_history Archives ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_status Status ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_tags Tags ir.ui.view qweb Inherits website_blog.index_right
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
Models touched (5)

New fields (3)
  • active Boolean
    default=True args: 'Active'
  • name Char
    required=True translate=True args: 'Blog Name'
  • subtitle Char
    translate=True args: 'Blog Subtitle'
Public methods (3)
  • all_tags(self, min_limit=1)
    @api.multi
  • message_post(self, parent_id=False, subtype=None, **kwargs)
    @api.multi@api.returns('self', <expr>)
    Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer.
  • write(self, vals)
    @api.multi

New fields (20)
  • active Boolean
    default=True args: 'Active'
  • author_avatar Binary
    related='author_id.image_small' string='Avatar'
  • author_id Many2one → res.partner
    default=<expr> args: 'res.partner', 'Author'
  • blog_id Many2one → blog.blog
    ondelete='cascade' required=True args: 'blog.blog', 'Blog'
  • content Html
    default=_default_content sanitize=False translate=html_translate args: 'Content'
  • cover_properties Text
    default='{"background-image": "none", "background-color": "oe_black", "opacity": "0.2", "resize_class": ""}' args: 'Cover Properties'
  • create_date Datetime
    index=True readonly=True args: 'Created on'
  • create_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Created by'
  • name Char
    default='' required=True translate=True args: 'Title'
  • post_date Datetime
    compute='_compute_post_date' inverse='_set_post_date' store=True args: 'Published date'
  • published_date Datetime
    args: 'Published Date'
  • ranking Float
    compute='_compute_ranking' string='Ranking'
  • subtitle Char
    translate=True args: 'Sub Title'
  • tag_ids Many2many → blog.tag
    string='Tags' args: 'blog.tag'
  • teaser Text
    compute='_compute_teaser' inverse='_set_teaser' args: 'Teaser'
  • teaser_manual Text
    string='Teaser Content'
  • visits Integer
    copy=False args: 'No of Views'
  • website_message_ids One2many → mail.message
    domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
  • write_date Datetime
    index=True readonly=True args: 'Last Modified on'
  • write_uid Many2one → res.users
    index=True readonly=True args: 'res.users', 'Last Contributor'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_access_action(self)
    @api.multi
    Instead of the classic form view, redirect to the post on website directly if user is an employee or if the post is published.
  • message_get_message_notify_values(self, message, message_values)
    @api.multi
    Override to avoid keeping all notified recipients of a comment. We avoid tracking needaction on post comments. Only emails should be sufficient.
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True translate=True args: 'Name'
  • post_ids Many2many → blog.post
    string='Posts' args: 'blog.post'
Public methods (0)

No public methods.

New fields (1)
  • path Char
    help='Used to display messages in a paragraph-based chatter using a unique path;' index=True args: 'Discussion Path'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • page_search_dependencies(self, view_id)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Nicolas Lempereur, Jérome Maes, Julien Legros, Richard Mathot, Géry Debongnie, Aaron Bohy, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, qsm-odoo, Romain Derie
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website_mail
    - website
    - web
    - base
    - web_editor
    - web_planner
    - mail
    - base_setup
    - web_kanban
    - bus
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
OpenERP Blog
============

        

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Blog Front-end assets ir.ui.view qweb Inherits website.assets_frontend
blog_breadcrumb Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
blog_feed blog_feed ir.ui.view qweb New
blog_post_complete Blog Post ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
content_new_blogpost content_new_blogpost ir.ui.view qweb Inherits website.user_navbar
header_footer_custom Footer News Blog Link ir.ui.view qweb Inherits website.footer_default
index Blog Navigation ir.ui.view qweb New
index_right Right Column ir.ui.view qweb Inherits website_blog.blog_post_short
latest_blogs Latest Blogs ir.ui.view qweb New
opt_blog_post_complete_comment Allow blog post comment ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_tags Tags ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_inline_discussion Allow comment in text ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_short_tags Tags ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_rc_about_us About Us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_blogs Our Blogs ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_follow_us Follow us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_history Archives ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_tags Tags ir.ui.view qweb Inherits website_blog.index_right
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
website_blog Snippet Blog ir.ui.view qweb Inherits website.snippets
Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • all_tags(self, cr, uid, ids, min_limit=1, context=None)

New fields (0)

No new fields.

Public methods (4)
  • create(self, cr, uid, vals, context=None)
  • get_access_action(self, cr, uid, ids, context=None)
    Override method that generated the link to access the document. Instead of the classic form view, redirect to the post on the website directly
  • html_tag_nodes(self, html, attribute=None, tags=None, context=None)
    Processing of html content to tag paragraphs and set them an unique ID. :return result: (html, mappin), where html is the updated html with ID and mapping is a list of (old_ID, new_ID), where old_ID is None is the paragraph is a new one.
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • page_search_dependencies(self, cr, uid, view_id, context=None)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/website_blog
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSOdoo Translation Bot, Christophe Matthieu, ajay javiya (OpenERP), Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, Géry Debongnie, Aaron Bohy, Richard Mathot (OpenERP), Nhomar - Vauxoo, ged-odoo, chm@openerp.com, ddm, ddm@openerp.com, Yogesh Parekh, Mahendra Barad (OpenERP), Nicolas Wisniewski, openerp-sle, Jeremy Kersten
WEBSITE
WEBSITEhttps://www.odoo.com/page/blog-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:38
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - knowledge
    - base
    - base_setup
    - web_kanban
    - web
    - website_mail
    - website
    - share
    - mail
    - email_template
    - website_partner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
OpenERP Blog
============

        

Code Analysis

Views touched (30)
XML IDNameModelTypeStatus
assets_editor Blog Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend website_blog assets ir.ui.view qweb Inherits website.assets_frontend
blog_breadcrumb Breadcrumb ir.ui.view qweb Inherits website_blog.blog_post_complete
blog_post_complete Blog Post ir.ui.view qweb New
blog_post_short Blog Posts ir.ui.view qweb New
blog_tag_form blog_tag_form blog.tag form New
blog_tag_tree blog_tag_tree blog.tag tree New
content_new_blogpost content_new_blogpost ir.ui.view qweb Inherits website.user_navbar
header_footer_custom Footer News Blog Link ir.ui.view qweb Inherits website.footer_default
index Blog Navigation ir.ui.view qweb New
index_right Right Column ir.ui.view qweb Inherits website_blog.blog_post_short
latest_blogs Latest Blogs ir.ui.view qweb New
opt_blog_post_complete_comment Allow blog post comment ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_complete_tags Tags ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_inline_discussion Allow comment in text ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_select_to_tweet Select to Tweet ir.ui.view qweb Inherits website_blog.blog_post_complete
opt_blog_post_short_tags Tags ir.ui.view qweb Inherits website_blog.blog_post_short
opt_blog_rc_about_us About Us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_blogs Our Blogs ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_follow_us Follow us ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_history Archives ir.ui.view qweb Inherits website_blog.index_right
opt_blog_rc_tags Tags ir.ui.view qweb Inherits website_blog.index_right
view_blog_blog_form blog.blog.form blog.blog form New
view_blog_blog_list blog.blog.list blog.blog tree New
view_blog_history_form blog.post.history.form blog.post.history form New
view_blog_history_tree blog.post.history.tree blog.post.history tree New
view_blog_post_form blog.post.form blog.post form New
view_blog_post_list blog.post.list blog.post tree New
view_blog_post_search blog.post.search blog.post search New
view_wiki_show_diff Show Difference blog.post.history.show_diff form New
Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • all_tags(self, cr, uid, ids, min_limit=1, context=None)

New fields (0)

No new fields.

Public methods (4)
  • create(self, cr, uid, vals, context=None)
  • create_history(self, cr, uid, ids, vals, context=None)
  • html_tag_nodes(self, html, attribute=None, tags=None, context=None)
    Processing of html content to tag paragraphs and set them an unique ID. :return result: (html, mappin), where html is the updated html with ID and mapping is a list of (old_ID, new_ID), where old_ID is None is the paragraph is a new one.
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (1)
  • getDiff(self, cr, uid, v1, v2, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.