Modyfikacja istniejącej strony

Spróbujmy zmodyfikować stronę rejestracji na wydarzenie. Najpierw przygotujmy kontroler:

# -*- coding: utf-8 -*-


from odoo import http
from odoo.http import request

class Front00Controller(http.Controller):

    @http.route(['/front0', '/front0/p/<int:page>'], type='http', auth="public", website=True)
    def events(self, p=1, **param):
        Event = request.env['event.event']
        events = Event.search([])
        values = {
            'events': events,
        }
        return request.render("front0.front0", values)

Przetestujmy go na własnym szablonie strony (front0):

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="front0" name="Front0">
        <t t-call="website.layout">
            <div id="wrap">
                <div class="oe_structure" />
                <div class="container">
                    <h1>FRONT0</h1>
                    <div class="row">
                        <div class="col-sm-12">
do uzupełnienia
                        </div>
                    </div>
                </div>
                <div class="oe_structure"></div>
            </div>
        </t>
    </template>
</odoo>

Po zainstalowaniu modułu możemy wyświetlić /front0.

Zmienimy odrobinę kontroler, aby wyświetlał szablon front1:

# -*- coding: utf-8 -*-

from odoo import http, _
# zob. addons/website_event/controllers/main.py
from odoo.addons.website_event.controllers.main import WebsiteEventController
from odoo.http import request

class WebsiteEventFront1Controller(WebsiteEventController):

    @http.route(['/front1',], type='http', auth="public", website=True)
    def front3(self, **param):
        Event = request.env['event.event']
        events = Event.search([])
        values = {
            'events': events,
        }
        return request.render("front1.front1", values)

Szablon ten (front1) dziedziczymy jednak z website_event.index:

<?xml version="1.0" encoding="utf-8"?>
<odoo>

    <template id="front1_tmpl" inherit_id="website_event.index">
        <xpath expr="//ul" position="after">
            <h2>TEST1</h2>
            <form id="sale_front1_form" t-attf-action="/front1" method="post">
            /event/front1/{slug(event)}
            <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
SEE: https://www.odoo.com/documentation/9.0/reference/http.html#csrf for


                <button type="submit"
                   class="btn btn-primary btn-lg pull-right a-submit">Front 1 Test</button>
            </form>
        </xpath>
    </template>
</odoo>

Na standardowym oknie rejestracji pojawia się dodatkowy przycisk "Front1 Test".