Пользовательское добавление и редактирование шаблона Dextertiy

'У меня есть пакет с именем foo.package. И у меня также есть элемент контента с именем mydocument.py. В стандартной структуре внутри foo/package у меня есть браузер, контент, профили и т. д. Чего я хочу добиться, так это создать настраиваемый шаблон добавления для моего элемента контента, который называется mydocument. Я прочитал статью по этой ссылке http://docs.plone.org/external/plone.app.dexterity/docs/advanced/custom-add-and-edit-forms.html

Что я сделал, так это создал файл в каталоге браузера и назвал его mydocumentaddform.py. Кроме того, внутри моего каталога браузера у меня есть каталог шаблонов.

Код внутри mydocumentaddform.py:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    form.wrap(False)

Внутри каталога browser/templates я создал шаблон mydocumentaddform.pt. Однако мой настроенный шаблон mydocumentaddform не отобразился, когда я добавил содержимое mydocument, поскольку внутри шаблона я добавил скрипт js, чтобы определить, переопределяет ли настроенный шаблон добавления шаблон добавления по умолчанию. Когда я просматриваю свой экземпляр, появляется предупреждение пользователя о том, что существует несвязанная конфигурация шаблона, которая указывает на мой шаблон добавления: ~... /foo/package/browser/templates/mydocumentaddform.pt

Есть ли кто-нибудь, кто сталкивался с такой же проблемой? Или есть другой способ сделать это? Спасибо.

* Да, я забыл включить кавычки здесь, на grok.name.

Обновление: я нашел временное решение внутри класса ViewPageTemplateFile. Вот обновленный код:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    template = ViewPageTemplateFile('templates/mydocumentaddform.pt')
    form.wrap(False)

Однако настроенный шаблон добавления был прочитан, но мой экземпляр всегда говорит, что шаблон, который я использовал, все еще не связан. Как я также заметил, когда я заменил базовый класс на dexterity.DisplayForm, ошибка экземпляра исчезла. С этим временным решением я не уверен в каком-либо возможном эффекте в будущем из-за этой постоянной ошибки.


person user1225163    schedule 04.06.2014    source источник


Ответы (1)


Я вижу некоторые проблемы в вашем коде: вам не хватает кавычек в имени:

grok.name('foo.package.mydocument')

вам нужно определить контекст:

grok.context(IMyDocument)

вы объявили дополнительный слой? тогда вам нужно:

grok.layer(IMyLayer)

вы можете найти рабочий пример в collective .nitf.

person hvelarde    schedule 06.06.2014
comment
Да, я добавил две строки, которые вы предлагаете, я создал слой внутри интерфейсов. Но у меня все еще есть эта ошибка в моем экземпляре, которая говорит, что UserWarning, что существует несвязанная конфигурация шаблона: ~... /foo/package/browser/templates/mydocumentaddform.pt - person user1225163; 06.06.2014