Можете ли вы иметь несколько общих подпредставлений элемента контента в Kotti?
Вы можете добавить "представление" для типа контента в kotti, выполнив следующие действия:
from kotti_mysite.views import poll_view
config.add_view(
poll_view,
context=Poll,
name='view',
permission='view',
renderer='kotti_mysite:templates/poll.pt',
)
(подробнее: http://kotti.readthedocs.org/en/latest/first_steps/tut-2.html)
Вы также можете иметь несколько представлений и использовать "установить представление по умолчанию", но иногда удобно иметь несколько одинаковых представлений с очень похожими URL.
Например, в plone тривиально иметь структуру url, подобную этой:
- / бла / элемент / <--- нормальный вид
- / бла / item / json <--- версия элемента Json
- / бла / item / pdf <--- PDF скачать элемент
Вы можете... сделать что-то подобное в kotti, используя созданное вами представление и отображая различный контент на основе параметров get / post, но это грязно и, честно говоря, скорее мусор.
Единственное решение, которое я нашел, - это иметь пользовательский тип контента "JsonView" с рендерингом json и добавить его как дочерний элемент родительского объекта, и он рендерит ищет родительский контент и отображает его.
Однако для этого необходимо вручную создать дочерний элемент "JsonView" для каждого экземпляра нужного вам типа, что также довольно громоздко.
Есть ли лучший способ сделать это?
-
В северном направлении Обратите особое внимание, что использование собственного представления /blah/item/json вообще не имеет смысла; любой тип элемента в любой родительской папке должен отображаться способом, описанным выше; использование одного статического маршрута не является правильным решением.
1 ответ
Вы можете зарегистрировать представление json для всего вашего контента, например так:
from kotti.interfaces import IContent
config.add_view(
my_json_view,
context=IContent,
name='json',
permission='view',
renderer='json',
)
Таким образом, когда вы открываете /blah/json
, где /blah
указывает на некоторый контент, он будет называть ваш my_json_view
Посмотреть.
Новая система проверки объектов класса SQLAlchemy может помочь вам написать полезное универсальное представление json, которое работает для нескольких типов контента. Кроме того, вы можете зарегистрировать свое представление только для определенных типов контента (используя более context
аргумент в config.add_view
).
С помощью renderer='json'
вы говорите пирамиде, что хотите использовать ее рендерер json.