2
0
Fork 0
wuttaweb/docs/narr/templates/lookup.rst
Lance Edgar fce0de5d30 feat: simplify base/page/form template structure; add docs
i'm sure there is more to document yet but this gets us started
2024-08-19 21:30:50 -05:00

70 lines
2.3 KiB
ReStructuredText

Template Lookup
===============
The discovery of templates is handled by Mako, and is configurable.
WuttaWeb comes with all templates it needs, in the path designated as
``wuttaweb:templates``.
When the app renders a page, it invokes the Mako lookup logic, which
searches one or more folders and returns the first matching file it
encounters. By default ``wuttaweb:templates`` is the only place it
looks.
A template is searched for by "name" but it is more path-like, e.g.
``/page.mako`` or ``/master/index.mako`` etc. So for example the file
at ``wuttaweb:templates/home.mako`` is used for home page (using
lookup name ``/home.mako``) by default.
.. _mako-template-override:
Overriding the Search Paths
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The basic idea is to give it a list of paths it should search when
trying to find a template. The first template file found for a given
search name is used and no further search is done for that name.
You can define the Mako lookup sequence in your ``web.conf`` as
follows:
.. code-block:: ini
[app:main]
mako.directories =
/random/path/on/disk
poser.web:templates
wuttaweb:templates
This setting is interpreted by ``pyramid_mako`` (`docs`_).
.. _docs: https://docs.pylonsproject.org/projects/pyramid_mako/en/latest/index.html#mako-directories
Here ``wuttaweb:templates/home.mako`` would still be used by default
for home page, *unless* e.g. ``/random/path/on/disk/home.mako``
existed in which case that would be used.
Each path can have an arbitrary set of templates, they will
effectively be combined to a single set by the app, with the
definition order determining search priority.
If you are already using a custom ``app.main()`` function for
constructing the web app during startup, it may be a good idea to
change the *default* search paths to include your package.
Setup for custom ``app.main()`` is beyond the scope here, but assuming
you *do* already have one, this is what it looks like::
from wuttaweb import app as base
def main(global_config, **settings):
# nb. set the *default* mako search paths; however config can
# still override with method shown above
settings.setdefault('mako.directories', ['poser.web:templates',
'wuttaweb:templates'])
return base.main(global_config, **settings)