2017-02-09 06:09:55 +00:00
|
|
|
Views
|
|
|
|
=====
|
|
|
|
|
2018-08-15 17:31:09 +00:00
|
|
|
The template parser reads views from the ``view`` subdirectory of a
|
|
|
|
gluon-web application (``/lib/gluon/config-mode/view`` for the config mode,
|
|
|
|
``lib/gluon/status-page/view`` for the status page).
|
|
|
|
Writing own views should usually be avoided in favour of using :doc:`model`
|
|
|
|
with their predefined views.
|
2017-02-09 06:09:55 +00:00
|
|
|
|
|
|
|
Views are partial HTML pages, with additional template tags that allow
|
|
|
|
to embed Lua code and translation strings. The following tags are defined:
|
|
|
|
|
|
|
|
- ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
|
|
|
|
- ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
|
|
|
|
- ``<%+`` ... ``%>`` includes another template.
|
|
|
|
- ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
|
|
|
|
- ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
|
|
|
|
in the translation. This only makes sense when the i18n catalog contains HTML code.
|
|
|
|
- ``<%#`` ... ``%>`` is a comment.
|
|
|
|
|
|
|
|
All of these also come in the whitespace-stripping variants ``<%-`` and ``-%>`` that
|
|
|
|
remove all whitespace before or after the tag.
|
|
|
|
|
|
|
|
Complex combinations of HTML and Lua code are possible, for example:
|
|
|
|
|
|
|
|
.. code-block:: text
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<% if foo then %>
|
|
|
|
Content
|
|
|
|
<% end %>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
Variables and functions
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
Many call sites define additional variables (for example, model templates can
|
2017-02-24 14:20:15 +00:00
|
|
|
access the model as *self* and a unique element ID as *id*), but the following
|
2017-02-09 06:09:55 +00:00
|
|
|
variables and functions should always be available for the embedded Lua code:
|
|
|
|
|
|
|
|
- *renderer*: :ref:`web-controller-template-renderer`
|
|
|
|
- *http*: :ref:`web-controller-http`
|
|
|
|
- *request*: Table containing the path components of the current page
|
|
|
|
- *url* (*path*): returns the URL for the given path, which is passed as a table of path components.
|
|
|
|
- *attr* (*key*, *value*): Returns a string of the form ``key="value"``
|
|
|
|
(with a leading space character before the key).
|
|
|
|
|
|
|
|
*value* is converted to a string (tables are serialized as JSON) and HTML entities
|
|
|
|
are escaped. Returns an empty string when *value* is *nil* or *false*.
|
|
|
|
- *include* (*template*): Includes another template.
|
|
|
|
- *node* (*path*, ...): Returns the controller node for the given page (passed as
|
|
|
|
one argument per path component).
|
|
|
|
|
|
|
|
Use ``node(unpack(request))`` to get the node for the current page.
|
|
|
|
- *pcdata* (*str*): Escapes HTML entities in the passed string.
|
|
|
|
- *urlencode* (*str*): Escapes the passed string for use in an URL.
|
2018-02-23 13:05:32 +00:00
|
|
|
- *translate*, *_translate*, *translatef* and *i18n*: see :doc:`i18n`
|