Metal: use-macro and metal: define-macro inside Five ViewPageTemplateFile

I would like to use a macro in a single Five ViewPageTemplateFile page template to avoid copying my code.

Below is my attempt:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:i18n="http://xml.zope.org/namespaces/i18n" tal:omit-tag="" > <metal:row define-macro="row"> <tal:block repeat="widget view/widgets"> <div tal:attributes="class python:'%s%s' % (widget.klass, widget.mode=='hidden' and ' hidden' or '')" tal:condition="python:view._includeRow(widget.name)"> <div tal:replace="structure widget/render"></div> </div> </tal:block> </metal:row> <table class="datagridwidget-table-view" tal:attributes="data-extra view/extra"> <thead> <tr> <th class="header"> <!-- --> </th> <th id="" class="header" tal:condition="view/allow_insert"></th> <th id="" class="header" tal:condition="view/allow_delete"></th> <th id="" class="header" tal:condition="view/allow_reorder"></th> <th id="" class="header" tal:condition="view/allow_reorder"></th> </tr> </thead> <tbody class="datagridwidget-body" tal:attributes="data-name_prefix view/name_prefix; data-id_prefix view/id_prefix"> <tal:row repeat="widget view/getNormalRows"> <tr> <metal:macro use-macro="here/row" /> </tr> </tal:row> <tal:row condition="view/getTTRow" define="widget view/getTTRow"> <tr> <metal:macro use-macro="here/row" /> </tr> </tal:row> <tal:row condition="view/getAARow" define="widget view/getAARow"> <tr> <metal:macro use-macro="here/row" /> </tr> </tal:row> </tbody> </table> <input type="hidden" tal:replace="structure view/counterMarker" /> </html> 

However, it is not defined here (since this is an old independent page template capable of doing things as far as I know).

How can I reference the template itself from the ViewPageTemplate.pt template and use / define macros inside the .pt file?

+6
source share
3 answers

I think you want:

 <metal:macro use-macro="template/macros/row" /> 
+7
source

When using ViewPageTemplateFile , you have access (at least) to the following variables in your template:

  • here
  • template
  • view

So, instead of "here" (which is equivalent to view/context ), you can use template/macros to access the macro of your string, as @davisagli indicates

+3
source

May also like

 <metal:macro use-macro="here/ViewPageTemplate/macros/row" /> 
+1
source

All Articles