0

我一直在处理克隆升级,我想我几乎完成了清理工作。

这个最新的错误让我...

在 main_template 我得到一个错误:

Macro Expansion failed
exceptions.NameError: name 'pathexpr' is not defined

我将其追溯到来自 portlets_fetcher 模板。这个是开箱即用的,但它仍然抛出错误。

没看懂,直接看:

tal:define="pathexpr python:slot[0];
            usemacro python:slot[1];"

有人知道我为什么会得到这个吗?

我的故障排除,我在尝试编辑自定义 main_template 时遇到错误。我在任何地方都没有看到 pathexpr,所以我使用了 skins 文件夹中的 find 选项卡,唯一的结果是 portlets_fetcher。我将 portlets_fetcher 复制到 custom 并在那里看到了同样的错误。

编辑:这是 portlets_fetcher 模板:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      i18n:domain="plone">
<body>
<metal:leftcolumn define-macro="left_column"
   tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
               tabindex python:Iterator(pos=10000, mainSlot=False);"0
   tal:condition="sl|nothing">
    <metal:block tal:repeat="slot sl">
        <tal:dontcrash tal:on-error="structure python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0])) or
                                            '&lt;div class=\'error\'&gt;Error %s on %s: %s&lt;/div&gt;' % (error.type, slot[0], error.value)"
                       tal:define="pathexpr python:slot[0];
                                   usemacro python:slot[1];">
        <tal:block tal:condition="usemacro">
            <metal:block metal:use-macro="python:path(pathexpr)" />
        </tal:block>
        <span tal:condition="not: usemacro"
              tal:replace="structure python:path(pathexpr)" />
        </tal:dontcrash>
    </metal:block>
</metal:leftcolumn>

<metal:rightcolumn define-macro="right_column"
   tal:define="Iterator python:modules['Products.CMFPlone'].IndexIterator;
               tabindex python:Iterator(pos=20000, mainSlot=False);"
   tal:condition="sr">
    <metal:block tal:repeat="slot sr">
        <tal:dontcrash tal:define="pathexpr python:slot[0];
                                   usemacro python:slot[1];">
        <tal:block tal:condition="usemacro">
            <metal:block metal:use-macro="python:path(pathexpr)" />
        </tal:block>
        <span tal:condition="not: usemacro"
              tal:replace="structure python:path(pathexpr)" />
        </tal:dontcrash>
    </metal:block>
</metal:rightcolumn>

</body>
</html>

这是main_template:

<metal:page define-macro="master"><metal:doctype define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:doctype>
<metal:block define-slot="top_slot" />
<metal:block use-macro="here/global_defines/macros/defines" />
<html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="en"
      lang="en"
      tal:attributes="lang language;
                      xml:lang language">
  <tal:cache tal:define="lang language;
                         charset site_properties/default_charset|string:utf-8">
    <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
      Get the global cache headers located in global_cache_settings.
    </metal:cache>
  </tal:cache>
  <head metal:use-macro="here/header/macros/html_header">
    <metal:fillbase fill-slot="base">
      <metal:baseslot define-slot="base">
        <base href="" tal:attributes="href here/renderBase" />
      </metal:baseslot>
    </metal:fillbase>
    <metal:headslot fill-slot="head_slot">
      <metal:headslot define-slot="head_slot" />
      <tal:comment replace="nothing"> A slot where you can insert elements in the header from a template </tal:comment>
    </metal:headslot>
    <metal:styleslot fill-slot="style_slot">
      <tal:comment replace="nothing"> A slot where you can insert CSS in the header from a template </tal:comment>
      <metal:styleslot define-slot="style_slot" />
    </metal:styleslot>
    <metal:cssslot fill-slot="css_slot">
      <tal:comment replace="nothing"> This is deprecated, please use style_slot instead. </tal:comment>
      <metal:cssslot define-slot="css_slot" />
    </metal:cssslot>
    <metal:javascriptslot fill-slot="javascript_head_slot">
      <tal:comment replace="nothing"> A slot where you can insert javascript in the header from a template </tal:comment>
      <metal:javascriptslot define-slot="javascript_head_slot" />
    </metal:javascriptslot>
  </head>
  <body tal:attributes="class here/getSectionFromURL;
                        dir python:test(isRTL, 'rtl', 'ltr')">
    <div id="visual-portal-wrapper">
      <div id="portal-top" i18n:domain="plone">
        <div id="portal-header">
            <p class="hiddenStructure">
                <a accesskey="2"
                   tal:attributes="href string:${current_page_url}#documentContent"
                   i18n:translate="label_skiptocontent">Skip to content.</a> |
                <a accesskey="6"
                   tal:attributes="href string:${current_page_url}#portlet-navigation-tree"
                   i18n:translate="label_skiptonavigation">Skip to navigation</a>
            </p>
             <div metal:use-macro="here/global_siteactions/macros/site_actions">
               Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)
             </div>
             <!--div metal:use-macro="here/global_searchbox/macros/quick_search">
               The quicksearch box, normally placed at the top right
             </div-->
             <a metal:use-macro="here/global_logo/macros/portal_logo">
               The portal logo, linked to the portal root
             </a>
             <!--div metal:use-macro="here/global_skinswitcher/macros/skin_tabs">
               The skin switcher tabs. Based on which role you have, you
               get a selection of skins that you can switch between.
             </div-->
             <div metal:use-macro="here/global_sections/macros/portal_tabs">
               The global sections tabs. (Welcome, News etc)
             </div>
          </div>
          <div metal:use-macro="here/global_personalbar/macros/personal_bar">
            The personal bar. (log in, logout etc...)
          </div>
          <!--div metal:use-macro="here/global_pathbar/macros/path_bar">
            The breadcrumb navigation ("you are here")
          </div-->
      </div>
      <!--div class="visualClear" id="clear-space-before-wrapper-table" /-->
      <tal:comment replace="nothing">
      The wrapper table. It contains the three columns. There's a table-less
      alternative in the plone_tableless skin layer that you can use if you
      prefer layouts that don't use tables.
      </tal:comment>
      <table id="portal-columns">
        <tbody>
          <tr>
            <tal:comment replace="nothing"> Start of the left column </tal:comment>
            <td id="portal-column-one"
                metal:define-slot="column_one_slot"
                tal:condition="sl">
              <div class="visualPadding">
                <metal:portlets define-slot="portlets_one_slot">
                  <metal:leftportlets use-macro="here/portlets_fetcher/macros/left_column">
                    This instruction gets the portlets (boxes) for the left column.
                  </metal:leftportlets>
                </metal:portlets>
                &nbsp;
              </div>
            </td>
            <tal:comment replace="nothing"> End of the left column </tal:comment>
            <tal:comment replace="nothing"> Start of main content block </tal:comment>
            <td id="portal-column-content"
                tal:define="tabindex python:Iterator(pos=0, mainSlot=True)">
              <metal:block define-slot="content">
                <div id="content"
                     metal:define-macro="content"
                     tal:define="show_border python:here.showEditableBorder(template_id=template_id, actions=actions );"
                     tal:attributes="class python:test(show_border,'documentEditable','')">
                  <metal:ifborder tal:condition="show_border" >

                    <tal:block tal:condition="not:here/isAnonymousUser">
                    <div metal:use-macro="here/global_contentviews/macros/content_views">
                      The content views (View, Edit, Properties, Workflow)
                    </div>
                    <div metal:use-macro="here/global_contentviews/macros/content_actions">
                      The content bar
                    </div>

                    </tal:block>

                  </metal:ifborder>
                  <div class="documentContent" id="region-content">
                    <a name="documentContent"></a>
                    <div metal:use-macro="here/global_statusmessage/macros/portal_message">
                      Portal status message
                    </div>

                    <metal:bodytext metal:define-slot="main" tal:content="nothing">
                      Page body text
                    </metal:bodytext>
                    <metal:sub metal:define-slot="sub">
                      <metal:discussion use-macro="here/viewThreadsAtBottom/macros/discussionView" />
                    </metal:sub>
                  </div>
                </div>
              </metal:block>
            </td>
            <tal:comment replace="nothing"> End of main content block </tal:comment>
            <tal:comment replace="nothing"> Start of right column </tal:comment>
            <td id="portal-column-two"
                metal:define-slot="column_two_slot"
                tal:condition="sr">
              <div class="visualPadding">
                <metal:portlets define-slot="portlets_two_slot">
                  <metal:rightportlets use-macro="here/portlets_fetcher/macros/right_column">
                    This instruction gets the portlets (boxes) for the right column.
                  </metal:rightportlets>
                </metal:portlets>
                &nbsp;
              </div>
            </td>
            <tal:comment replace="nothing"> End of the right column </tal:comment>
          </tr>
        </tbody>
      </table>
      <tal:comment replace="nothing"> end column wrapper </tal:comment>
      <div class="visualClear" id="clear-space-before-footer"><!-- --></div>

      <hr class="netscape4" />
      <metal:block i18n:domain="plone">
        <metal:footer use-macro="here/footer/macros/portal_footer">
          Footer
        </metal:footer>
        <metal:colophon use-macro="here/colophon/macros/colophon">
          The colophon area - contains details about the production of
          the site. Typically "powered by" buttons, standards, tools used.
        </metal:colophon>
      </metal:block>
    </div>
</body>
</html>
</metal:page>
4

1 回答 1

0

看来这不是问题的根源。将使用适当的信息打开另一个查询。

感谢您的关注!

于 2012-09-13T15:38:02.980 回答