你能在Kotti中拥有一个内容元素的多个通用子视图吗?

2024-05-17 12:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

您可以在kotti中为内容类型添加一个“view”,方法如下:

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<;---item的json版本
  • /blah/item/pdf<;——项目的pdf下载

你可以。。。有点类似,在kotti中做一件类似的事情,改变你创建的视图,并基于get/post参数呈现不同的内容,但这很混乱,坦白说,相当垃圾。在

我找到的唯一解决方案是拥有一个自定义内容类型“JsonView”,它有一个json呈现器,并将其作为父对象的子对象添加,它的呈现器将查找父内容并呈现该父对象。在

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

有更好的方法吗?在

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


Tags: 对象方法ltview视图json类型内容
1条回答
网友
1楼 · 发布于 2024-05-17 12:38:27

您可以为所有内容注册一个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的new class object inspection system可能会帮助您编写一个有用的通用json视图,该视图适用于多个内容类型。或者,您可以只为特定的内容类型注册视图(通过在config.add_view中使用更具体的context参数)。在

使用renderer='json'你告诉金字塔你想使用它的json renderer。在

相关问题 更多 >