您可以通过以下方式执行某些操作,为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)
您也可以拥有多个视图,并使用“设置默认视图”,但有时候使用非常相似的网址可以很方便地获得几个相似的视图。
例如,在plone中,它有一个像这样的url结构:
你可以...在kotti做类似的事情,通过拧紧你创建的视图并根据get / post params呈现不同的内容,但它很混乱,坦率地说,相当垃圾。
我发现的唯一解决方案是拥有一个带有json渲染器的自定义内容类型“JsonView”,并将其添加为父对象的子级,并且它的渲染器会查找父内容并呈现它。
但是,这样做需要您为所需类型的每个实例手动创建一个'JsonView'子项,这也很麻烦。
有更好的方法吗?
-
的Nb。特别要注意的是,拥有自定义视图/ blah / item / json完全没有任何用处;任何类型的项目,在任何父文件夹中都应该能够以上述方式呈现;使用单一静态路由不是正确的解决方案。
答案 0 :(得分:2)
您可以为所有内容注册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视图。或者,您可以仅针对特定内容类型注册视图(通过context
中使用更具体的config.add_view
参数)。
使用renderer='json'
告诉Pyramid您要使用其json renderer。