From cfc7015355848629cdc7f7d9fde795c929eec093 Mon Sep 17 00:00:00 2001 From: Xavier Morel <xmo@openerp.com> Date: Fri, 7 Feb 2014 11:11:57 +0100 Subject: [PATCH] [FIX] templating section, some wording --- doc/howto/howto_website.rst | 57 +++++++++++++++------- doc/howto/howto_website/templates-basic | 22 ++++++--- doc/howto/howto_website/website-dependency | 13 +++-- doc/howto/howto_website/website-layoutify | 8 +-- 4 files changed, 68 insertions(+), 32 deletions(-) diff --git a/doc/howto/howto_website.rst b/doc/howto/howto_website.rst index 452d83d1aca4..65a6ed183272 100644 --- a/doc/howto/howto_website.rst +++ b/doc/howto/howto_website.rst @@ -31,13 +31,29 @@ create a module: .. patch:: :hidden: -This builds a basic module for you, ignore anything in the ``models`` and -``security`` directories for now. +This builds a basic module for you: + +.. code-block:: text + + academy + ├── __init__.py + ├── __openerp__.py + ├── controllers + │  ├── __init__.py + │  └── my_controller.py + ├── models + │  ├── __init__.py + │  └── my_model.py + └── security + └── ir.model.access.csv + +Ignore anything in the ``models`` and ``security`` directories for now. .. todo:: * instructions for start & install * db handling + - if existing db, automatically selected - if no existing db, nodb -> login -> login of first db - dbfilter @@ -46,6 +62,8 @@ Now start your OpenERP server and install your module in it, open a web browser and navigate to http://localhost:8069. A page should appear with just the words "Hello, world!" on it. +.. todo:: screenshot? + Let's prettify things a bit: instead of returning just a bit of text, we can return a page, and use a tool like bootstrap_ to get a nicer rendering than the default. @@ -57,21 +75,28 @@ returned by the ``index`` method to get a more page-ish output: .. note:: - this example requires internet access at all time, as we're accessing a - :abbr:`CDN (Content Delivery Network, large distributed networks hosting - static files and trying to provide high-performance and high-availability - of these files)`-hosted file. + this example requires internet access as we're accessing a :abbr:`CDN + (Content Delivery Network, large distributed networks hosting static files + and trying to provide high-performance and high-availability of these + files)`-hosted file. + +.. todo:: screenshot Data input: URL and query ========================= Being able to build a static page in code is nice, but makes for limited -usefulness (you could do that with static files in the first place). +usefulness (you could do that with static files). + +You can also create dynamic pages which use data provided in the URL, +for instance so a single controller generates multiple pages. Any +query parameter (``?name=value``) is passed as a string parameter to the +controller method. -You can also create controllers which use data provided in the access URL, -for instance so you have a single controller generating multiple pages. Any -query parameter (``?name=value``) is passed as a parameter to the controller -function, and is a string. +For instance, the index page can display a list of teaching assistants linking +to a page for each assistant through their index in a global array. Each +assistant's page will simply print their name by applying the index to the +array: .. patch:: @@ -89,16 +114,14 @@ This can be done by adding `converter patterns`_ to the URL in These patterns can perform conversions directly (in this case the conversion from a string URL section to a python integer) and will perform a some validation (if the ``id`` is not a valid integer, the converter will return a -``404 Not Found`` instead of generating a server error when the conversion -fails). +``404 Not Found`` instead of a 500 server error when the conversion fails). Templating: better experience in editing ======================================== -So far we've created HTML output by munging together Python strings using -string concatenation and formatting. It works, but is not exactly fun to edit -(and somewhat unsafe to boot) as even advanced text editors have a hard time -understanding they're dealing with HTML embedded in Python code. +So far we've output HTML by munging strings. It works, but is not exactly fun +to edit (and somewhat unsafe to boot) as even advanced text editors have a +hard time understanding they're dealing with HTML embedded in Python code. The usual solution is to use templates_, documents with placeholders which can be "rendered" to produce final pages (or others). OpenERP lets you use any diff --git a/doc/howto/howto_website/templates-basic b/doc/howto/howto_website/templates-basic index b0e5d85c4879..e3475046b2d0 100644 --- a/doc/howto/howto_website/templates-basic +++ b/doc/howto/howto_website/templates-basic @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 170cc87a26983d34df5cd3bb27d3259722c586e5 +# Parent 0792d59a4a456e1ce70d8aa4cb1784632883d714 diff --git a/__openerp__.py b/__openerp__.py --- a/__openerp__.py @@ -19,7 +19,13 @@ diff --git a/__openerp__.py b/__openerp__.py diff --git a/controllers/my_controller.py b/controllers/my_controller.py --- a/controllers/my_controller.py +++ b/controllers/my_controller.py -@@ -19,36 +19,10 @@ class my_controller(main.Home): +@@ -14,41 +14,18 @@ teaching_assistants = [ + class my_controller(main.Home): + @http.route('/', auth='none') + def index(self): ++ cr, uid, context = http.request.cr, http.request.uid, http.request.context + tas = [ + '<li><a href="/tas/%d/">%s</a></li>' % (i, ta['name']) for i, ta in enumerate(teaching_assistants) ] @@ -42,9 +48,9 @@ diff --git a/controllers/my_controller.py b/controllers/my_controller.py -""" % { - 'tas': '\n'.join(tas) - } -+ return "" % { ++ return http.request.registry['ir.ui.view'].render(cr, uid, 'academy.index', { + 'tas': '\n'.join(tas) -+ } ++ }, context=context) @http.route('/tas/<int:id>/', auth='none') def ta(self, id): @@ -59,7 +65,9 @@ diff --git a/controllers/my_controller.py b/controllers/my_controller.py - </body> -</html> -""" % teaching_assistants[id] -+ return "" % teaching_assistants[id] ++ cr, uid, context = http.request.cr, http.request.uid, http.request.context ++ return http.request.registry['ir.ui.view'].render( ++ cr, uid, "academy.tas", teaching_assistants[id], context=context) diff --git a/views/templates.xml b/views/templates.xml new file mode 100644 --- /dev/null @@ -67,7 +75,7 @@ new file mode 100644 @@ -0,0 +1,39 @@ +<openerp> + <data> -+<template id="academy.index" name="Index"> ++<template id="index" name="Index"> + <html> + <head> + <title>AcademyAcademy</title> @@ -90,7 +98,7 @@ new file mode 100644 + </html> +</template> + -+<template id="academy.ta" name="Teaching Assistant"> ++<template id="ta" name="Teaching Assistant"> + <html> + <head> + <title>AcademyAcademy TA <t t-esc="name"/></title> diff --git a/doc/howto/howto_website/website-dependency b/doc/howto/howto_website/website-dependency index 6910aff199e8..45c097dad728 100644 --- a/doc/howto/howto_website/website-dependency +++ b/doc/howto/howto_website/website-dependency @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 5426218c6da91a13911e64eeb18a0cc2e19083c7 +# Parent 1960586e8781d62d0cc8c2b7b9df7b04fb20f3ae diff --git a/__openerp__.py b/__openerp__.py --- a/__openerp__.py @@ -16,13 +16,14 @@ diff --git a/__openerp__.py b/__openerp__.py diff --git a/controllers/my_controller.py b/controllers/my_controller.py --- a/controllers/my_controller.py +++ b/controllers/my_controller.py -@@ -12,17 +12,12 @@ teaching_assistants = [ +@@ -12,20 +12,12 @@ teaching_assistants = [ ] class my_controller(main.Home): - @http.route('/', auth='none') + @http.route('/', auth='public') def index(self): +- cr, uid, context = http.request.cr, http.request.uid, http.request.context - tas = [ - '<li><a href="/tas/%d/">%s</a></li>' % (i, ta['name']) - for i, ta in enumerate(teaching_assistants) @@ -31,14 +32,16 @@ diff --git a/controllers/my_controller.py b/controllers/my_controller.py + 'tas': teaching_assistants, + }) -- return "" % { +- return http.request.registry['ir.ui.view'].render(cr, uid, 'academy.index', { - 'tas': '\n'.join(tas) -- } +- }, context=context) - - @http.route('/tas/<int:id>/', auth='none') + @http.route('/tas/<int:id>/', auth='public', website=True) def ta(self, id): -- return "" % teaching_assistants[id] +- cr, uid, context = http.request.cr, http.request.uid, http.request.context +- return http.request.registry['ir.ui.view'].render( +- cr, uid, "academy.tas", teaching_assistants[id], context=context) + return http.request.website.render('academy.ta', teaching_assistants[id]) diff --git a/views/templates.xml b/views/templates.xml --- a/views/templates.xml diff --git a/doc/howto/howto_website/website-layoutify b/doc/howto/howto_website/website-layoutify index 27cfd6de74f6..204e1305c1ac 100644 --- a/doc/howto/howto_website/website-layoutify +++ b/doc/howto/howto_website/website-layoutify @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 375b20994a7069eadfbd64c793328a07f7d9baf6 +# Parent 307d452da9602b1bc1a8ed208e6949924ba0e5cf diff --git a/views/templates.xml b/views/templates.xml --- a/views/templates.xml @@ -7,7 +7,7 @@ diff --git a/views/templates.xml b/views/templates.xml @@ -1,42 +1,46 @@ <openerp> <data> - <template id="academy.index" name="Index"> +-<template id="index" name="Index"> - <html> - <head> - <title>AcademyAcademy</title> @@ -32,6 +32,7 @@ diff --git a/views/templates.xml b/views/templates.xml - </ul> - </body> - </html> ++<template id="academy.index" name="Index"> + <t t-call="website.layout"> + <div id="wrap"> + <div class="oe_structure"/> @@ -60,7 +61,7 @@ diff --git a/views/templates.xml b/views/templates.xml + </t> </template> - <template id="academy.ta" name="Teaching Assistant"> +-<template id="ta" name="Teaching Assistant"> - <html> - <head> - <title>AcademyAcademy TA <t t-esc="name"/></title> @@ -70,6 +71,7 @@ diff --git a/views/templates.xml b/views/templates.xml - <h1><t t-esc="name"/></h1> - </body> - </html> ++<template id="academy.ta" name="Teaching Assistant"> + <t t-call="website.layout"> + <div id="wrap"> + <div class="oe_structure"/> -- GitLab