As seen in the preceding section, inheritance with controllers works slightly differently than model inheritance; you actually need a reference to the base class and to use Python inheritance on it.
Don't forget to decorate your new handler with the @http.route decorator; Odoo uses it as a marker, for which methods are exposed to the network layer. If you omit the decorator, you actually make the handler's path inaccessible.
The @http.route decorator itself behaves similarly to field declarations: every value you don't set will be derived from the decorator of the function you're overriding, so we don't have to repeat values we don't want to change.
After receiving a response object from the function you override, you can do a lot more than just change the QWeb context:
- You can add or remove HTTP headers by manipulating response.headers
- If you want to render an entirely different template, you can overwrite response.template
- To detect whether a response is based on QWeb in the first place, query response.is_qweb
- The resulting HTML code is available by calling response.render()