1

您可以通过执行以下操作在 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 结构是微不足道的:

  • /blah/item/ <--- 普通视图
  • /blah/item/json <--- 项目的 Json 版本
  • /blah/item/pdf <--- 项目的 PDF 下载

您可以...在 kotti 中做类似的事情,方法是使用您创建的视图并根据 get/post 参数渲染不同的内容,但这很混乱,坦率地说,相当垃圾。

我发现的唯一解决方案是拥有一个具有 json 渲染器的自定义内容类型“JsonView”,并将其添加为父对象的子对象,它的渲染器会查找父内容并进行渲染。

但是,这样做需要您为所需类型的每个实例手动创建一个“JsonView”子级,这也相当麻烦。

有没有更好的方法来做到这一点?

--

NB。特别注意,拥有自定义视图 /blah/item/json 根本没有任何用处;任何父文件夹中的任何类型的项目都应该能够以上述方式呈现;使用单个静态路由不是正确的解决方案。

4

1 回答 1

2

您可以为所有内容注册一个 json 视图,如下所示:

from kotti.interfaces import IContent

config.add_view(
    my_json_view,
    context=IContent,
    name='json',
    permission='view',
    renderer='json',
)

这样,当您打开指向某些内容的/blah/jsonwhere时,它​​将调用您的视图。/blahmy_json_view

SQLAlchemy 的新类对象检查系统可能会帮助您编写一个有用的通用 json 视图,该视图适用于多种内容类型。或者,您可以仅为特定内容类型注册您的视图(通过在 中使用更具体的context参数config.add_view)。

使用renderer='json'你告诉 Pyramid 你想使用它的json 渲染器

于 2013-09-14T09:21:51.877 回答