fix: add get_page_templates()
method for master view
i thought i needed it to do something clever for report views, but wound up not needing it.. however this seems like a reasonable abstraction which may come in handy later
This commit is contained in:
parent
c1e6053aaf
commit
956021dcbf
|
@ -1777,14 +1777,14 @@ class MasterView(View):
|
|||
context = self.get_template_context(context)
|
||||
|
||||
# first try the template path most specific to this view
|
||||
template_prefix = self.get_template_prefix()
|
||||
mako_path = f'{template_prefix}/{template}.mako'
|
||||
page_templates = self.get_page_templates(template)
|
||||
mako_path = page_templates[0]
|
||||
try:
|
||||
return render_to_response(mako_path, context, request=self.request)
|
||||
except IOError:
|
||||
|
||||
# failing that, try one or more fallback templates
|
||||
for fallback in self.get_fallback_templates(template):
|
||||
for fallback in page_templates[1:]:
|
||||
try:
|
||||
return render_to_response(fallback, context, request=self.request)
|
||||
except IOError:
|
||||
|
@ -1815,21 +1815,51 @@ class MasterView(View):
|
|||
"""
|
||||
return context
|
||||
|
||||
def get_page_templates(self, template):
|
||||
"""
|
||||
Returns a list of all templates which can be attempted, to
|
||||
render the current page. This is called by
|
||||
:meth:`render_to_response()`.
|
||||
|
||||
The list should be in order of preference, e.g. the first
|
||||
entry will be the most "specific" template, with subsequent
|
||||
entries becoming more generic.
|
||||
|
||||
In practice this method defines the first entry but calls
|
||||
:meth:`get_fallback_templates()` for the rest.
|
||||
|
||||
:param template: Base name for a template (without prefix), e.g.
|
||||
``'view'``.
|
||||
|
||||
:returns: List of template paths to be tried, based on the
|
||||
specified template. For instance if ``template`` is
|
||||
``'view'`` this will (by default) return::
|
||||
|
||||
[
|
||||
'/widgets/view.mako',
|
||||
'/master/view.mako',
|
||||
]
|
||||
|
||||
"""
|
||||
template_prefix = self.get_template_prefix()
|
||||
page_templates = [f'{template_prefix}/{template}.mako']
|
||||
page_templates.extend(self.get_fallback_templates(template))
|
||||
return page_templates
|
||||
|
||||
def get_fallback_templates(self, template):
|
||||
"""
|
||||
Returns a list of "fallback" template paths which may be
|
||||
attempted for rendering a view. This is used within
|
||||
:meth:`render_to_response()` if the "first guess" template
|
||||
file was not found.
|
||||
attempted for rendering the current page. See also
|
||||
:meth:`get_page_templates()`.
|
||||
|
||||
:param template: Base name for a template (without prefix), e.g.
|
||||
``'custom'``.
|
||||
``'view'``.
|
||||
|
||||
:returns: List of full template paths to be tried, based on
|
||||
the specified template. For instance if ``template`` is
|
||||
``'custom'`` this will (by default) return::
|
||||
:returns: List of template paths to be tried, based on the
|
||||
specified template. For instance if ``template`` is
|
||||
``'view'`` this will (by default) return::
|
||||
|
||||
['/master/custom.mako']
|
||||
['/master/view.mako']
|
||||
"""
|
||||
return [f'/master/{template}.mako']
|
||||
|
||||
|
|
Loading…
Reference in a new issue