动态TAL提供程序:表达式

时间:2012-03-19 08:02:14

标签: plone

如何在`structure provider:xxx

中动态查找页面模板中的提供程序

考虑以下非工作示例

<div class="portlet-manager-row" tal:repeat="portletId python:range(1,5)">
    <div class="porlet-well_manager">
        <h2 i18n:translate="portlet-well-a">Portlet Well <b tal:content="portletId" /></h2>
        <tal:manager define="managerId string:ColophonPortlets${portletId}">
            <span tal:replace="structure provider:managerId" />
        </tal:manager>
    </div>
</div>

部件提供程序:失败,因为提供程序:假定输入它始终是提供程序名称的直接字符串,并且似乎不接受变量。

1 个答案:

答案 0 :(得分:1)

TALES Provider Expression是String Expression的子类,所以你应该能够这样做:

<div class="portlet-manager-row" tal:repeat="portletId python:range(1,5)">
    <div class="porlet-well_manager">
        <h2 i18n:translate="portlet-well-a">Portlet Well <b tal:content="portletId" /></h2>

        <span tal:replace="structure provider:ColophonPortlets$portletId" />
    </div>
</div>

注意字符串表达式是多余的,我移动并简化了$portletId变量插值;对于更复杂的字符串插值,请使用${expression}语法(例如${request/providername})。