Odoo’s website framework is one of its most exciting features — enabling you to build anything from simple informational pages to fully-custom frontend views that interact with backend models. In this blog, we’ll walk through:
- Method 1: Create Custom Pages Using Odoo Website Builder (No Code)
- Method 2: Create Fully Custom Pages With a Custom Module, Controller & QWeb Template
- Tips, Best Practices & Use Cases
Method 1: Create Custom Pages Using Odoo Website Builder (No Code)
If your goal is to build marketing-style pages like About Us, Landing Pages, Contact Pages, or Campaign-Specific Pages, Odoo’s native Website Builder is the fastest way — and it requires no coding at all.
Steps to Create a Custom Page
- Go to Website → New → Page
- Choose a Blank Page or a Pre-built Template
- Enter the Page Name and URL
- Click Create
Customize Your Page
Once created, you can tailor your page visually:
- Drag & Drop building blocks (Text, Images, Banners, CTAs, Forms)
- Configure layout, spacing, colors, and animations
- Add SEO content:
- Title
- Meta description
- URL slug
This approach is perfect for non-technical users and marketing teams — great for creating landing pages, brand pages, service pages, and other content fast without writing a single line of code.
📌 Best suited for: marketing pages, SEO content, informational pages, campaign landing pages.
Method 2: Build Custom Web Pages in Odoo 19 Using Code
If you need a web page that fetches dynamic data, integrates with backend logic, or goes beyond the drag-and-drop editor, you’ll want to build a custom module that defines its own controllers and views.
Here’s how:
1. Module Structure
Create a new module, e.g., custom_web_page, with this structure:
custom_web_page/
├── __init__.py
├── __manifest__.py
├── controllers/
│ ├── __init__.py
│ └── main.py
└── views/
└── templates.xml
2. Define the Manifest
Add metadata and dependencies — especially website so Odoo knows this module has frontend behavior:
# __manifest__.py
{
'name': 'Custom Web Page',
'version': '19.0.1.0.0',
'summary': 'A module to create a custom web page in Odoo.',
'author': 'Vraja Technologies',
'depends': ['base', 'website'],
'data': ['views/templates.xml'],
'installable': True,
}
3. Create a Controller
Controllers handle HTTP requests and return pages.
# controllers/main.py
from odoo import http
from odoo.http import request
class HelloWorld(http.Controller):
@http.route('/hello-odoo', type='http', auth='public', website=True)
def hello_page(self, **kwargs):
user_name = request.env.user.name if request.env.user.id else 'Guest'
return request.render('custom_web_page.hello_page_template', {
'user_name': user_name,
})
✔ @http.route — defines the URL
✔ auth='public', website=True — ensure the page integrates with the site frontend
4. Create the QWeb Template
In views/templates.xml, include layout, header, and dynamic content
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="hello_page_template" name="Hello Odoo Page">
<t t-call="website.layout">
<div class="container text-center mt-5">
<h1>Welcome to Our Custom Odoo Page!</h1>
<p class="lead">Hello, <t t-esc="user_name"/>! This page was rendered by a custom controller.</p>
</div>
</t>
</template>
<record id="hello_page_menu" model="website.menu">
<field name="name">Hello Page</field>
<field name="url">/hello-odoo</field>
<field name="parent_id" ref="website.main_menu"/>
<field name="sequence" eval="99"/>
</record>
</data>
</odoo>
5. Install & Test
- Place your module in Odoo’s addons folder
- Restart the Odoo server
- Install your module via Apps
- Visit /hello-odoo or click the Hello Page menu item
You should now see a fully functional custom page that displays dynamic content from Odoo.
Best Practices & Tips
🔹 Use Website Builder (No Code) when content is static or marketing-orientated.
🔹 Use Custom Controllers & Templates for dynamic pages, integrations, or product-driven experiences.
🔹 Always add SEO metadata — title, description, canonical URLs.
🔹 Use Odoo’s QWeb inheritance to extend existing views safely for upgrades.
Wrap-Up
At Vraja Technologies, we help teams leverage Odoo to its fullest — whether it’s empowering marketing teams with drag-and-drop web pages or enabling developers to extend the platform with custom controllers and templates. Combining Odoo’s flexibility with your business goals leads to fast deployments and powerful web experiences.
Want help building advanced web pages or custom modules? Contact Vraja — we’re Odoo experts ready to support your next project.