70 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			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)
 |