1

我正在阅读最近的 Professional Plone 4 Development 一书,安装 Plone 4.1.2。

我已经通过 Dexterity 成功定义了内容类型,现在正在尝试为其中一种类型创建自定义视图。架构和视图定义如下:

from zope import schema
from plone.directives import form
from five import grok
from ctcc.contenttypes import CTCCTypesMessageFactory as _

class ITrial(form.Schema):
    """A clinical trial."""

    title = schema.TextLine(
        title = _(u'label_title', default=u'Title'),
        required = True,
    )

    description = schema.Text(
        title=_(u'label_description', default=u'Description'),
        description = _(u'help_description', default=u'A short summary of the content'),
        required = False,
        missing_value = u'',
    )

class View(grok.View):
    grok.context(ITrial)
    grok.require('zope2.View')
    grok.name('view')

这是类型的 FTI 中的相关部分:查看 False

<alias from="(Default)" to="(selected layout)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="@@view"/>

<action title="View" action_id="view" category="object" condition_expr=""
    url_expr="string:${folder_url}/" visible="True">
    <permission value="View"/>
</action>

而模板本身,位于ctcc.contenttypes/trial_templates/view.pt中,应该只显示标题和描述:

<html xmlns="http://www.w3.org/1999/xhtml" xml: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"
      lang="en"
      metal:use-macro="context/main_template/macros/master"
      i18n:domain="ctcc.contenttypes">
<body>

<metal:content-core fill-slot="content-core">
    <metal:content-core define-macro="content-core">

        <div tal:replace="structure context/text/output" />

    </metal:content-core>
</metal:content-core>

</body>
</html>

在所有这些都到位的情况下访问该类型的任何实例会导致“找不到页面”错误。似乎并没有将新视图与预期路径捆绑在一起,但由于这是我使用 Plone 的第一周,我不知道从哪里开始追踪它。我也没有看到在前台模式下运行站点时出现错误。

任何帮助将不胜感激。

4

2 回答 2

2

您是否在 setup.py 中包含了依赖项?

install_requires=[
  'setuptools',
  'plone.app.dexterity',
  ...
  ],

你在你的 configure.zcml 中初始化了 Grok 吗?

<configure
  xmlns="http://namespaces.zope.org/zope"
  ...
  xmlns:grok="http://namespaces.zope.org/grok">

  <includeDependencies package="." />
  <grok:grok package="." />
  ...

</configure>

您是否在 metadata.xml 中包含了 Dexterity 的 GenericSetup 配置文件?

<metadata>
 <version>1</version>
 <dependencies>
  <dependency>profile-plone.app.dexterity:default</dependency>
 </dependencies>
</metadata>
于 2011-10-28T12:49:10.537 回答
0

问题出在模板中的这一行:

<div tal:replace="structure context/text/output" />

我已经将示例模板剥离到我认为的最低限度。感谢 David Glick 的建议,我从error_log中的忽略异常列表中删除了NotFound并看到以下内容:

  Module Products.PageTemplates.Expressions, line 225, in evaluateText
  Module zope.tales.tales, line 696, in evaluate
   - URL: /opt/plone41/zeocluster/src/ctcc.contenttypes/ctcc/contenttypes/trial_templates/view.pt
   - Line 13, Column 8
   - Expression: <PathExpr standard:u'context/text/output'>
  [...]
  Module OFS.Traversable, line 299, in unrestrictedTraverse
   - __traceback_info__: ([], 'text')
NotFound: text

现在我可以看到导致问题的原因并开始更深入地阅读 TAL,我可以看到它失败的原因:怀疑是我的无知。

感谢大家!

于 2011-10-31T05:24:15.117 回答