Добавление нового представления к типу ловкости приводит к тому, что страница не найдена при просмотре элементов

Я работаю над последней книгой по разработке Professional Plone 4, над установкой Plone 4.1.2.

Я успешно определил типы контента с помощью ловкости и теперь пытаюсь создать собственное представление для одного из типов. Схема и представление определяются следующим образом:

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 типа: view 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, я понятия не имею, с чего начать отслеживать это. Я также не вижу ошибок при запуске сайта в режиме переднего плана.

Любая помощь будет принята с благодарностью.


person Matthew Trevor    schedule 28.10.2011    source источник
comment
Знаете ли вы, что вам следует повторно выполнить соответствующий шаг в portal_setup после того, как вы что-то изменили в GenericSetup XML?   -  person JC Brand    schedule 28.10.2011
comment
Перейдите к error_log в ZMI и удалите NotFound из списка игнорируемых исключений. Затем снова перейдите к представлению и посмотрите, получите ли вы дополнительную информацию.   -  person David Glick    schedule 28.10.2011
comment
@JC Brand: На данном этапе я вообще не изменяю файлы GenericSetup. Тип ловкости был создан и работает нормально, только после добавления представления в файл python он начинает выдавать ошибку. Спасибо, однако, я действительно должен был сделать это более ясным и сейчас обновлю.   -  person Matthew Trevor    schedule 31.10.2011
comment
@David Glick: Спасибо, что не только помогли раскрыть проблему, но и сами по себе являются бесценным советом по отладке.   -  person Matthew Trevor    schedule 31.10.2011


Ответы (2)


вы включили зависимость в setup.py?

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

Вы инициализировали Grok в файле configure.zcml?

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

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

</configure>

Вы включили профиль GenericSetup от Dexterity в свой файл metadata.xml?

<metadata>
 <version>1</version>
 <dependencies>
  <dependency>profile-plone.app.dexterity:default</dependency>
 </dependencies>
</metadata>
person hvelarde    schedule 28.10.2011
comment
Все они были такими, как указано, хотя вместо этого в моем setup.py есть «plone.app.dexterity [grok]». Я должен был указать в вопросе, что базовые функции создания типов работают нормально, а не работают только пользовательские представления для этих типов. Спасибо за вашу помощь в любом случае. - person Matthew Trevor; 31.10.2011

Проблема была с этой строкой в ​​шаблоне:

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

Я сократил образец шаблона до минимума, который думал. Благодаря предложению Дэвида Глика я удалил NotFound из списка игнорируемых исключений в error_log и увидел следующее:

  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, я могу понять, почему это не удается: невежество с моей стороны, как и предполагалось.

Всем спасибо!

person Matthew Trevor    schedule 31.10.2011