原则¶
我们将从接口的描述开始,提供对可用类和方法的基本理解,然后详细介绍视图选择原则。
A View 是负责将模型中的数据呈现为最终用户可使用表单的对象。它们通常会产生一个XHTML流,但也有一些视图关注电子邮件和其他非HTML输出。
发现可能的视图¶
可以将Web用户界面配置为在左侧框中显示可应用于当前结果集的所有视图。
要启用此功能,请单击右上角的登录名。在验证更改之前,选择“用户首选项”,然后选择“框”,然后选择“可能的视图框”,并选中“可见=是”。
这里列出的视图要么因为分数较低而没有被选中,要么被主模板逻辑故意排除在外。
视图的基本类¶
等级 View
¶
视图的基本界面如下(请记住,结果集有一个表格结构,包含行和列,因此是单元格):
render(**context) ,通过调用 call 或 cell_call 取决于上下文
call(**kwargs) ,调用视图以获取完整的结果集或空值(默认实现调用 cell_call() 在结果集的每个单元格上)
cell_call(row, col, **kwargs) ,调用结果集的给定单元格的视图 (row 和 col 是用来访问单元的整数)
url() ,返回允许我们使用当前结果集获取视图的URL
wview(__vid, rset, __fallback_vid=None, **kwargs) ,调用标识符视图 __vid 在给定的结果集上。如果请求的视图不适用于结果集,则可以提供将使用的回退视图标识符。
html_headers() ,返回要由主模板设置的HTML头列表
page_title(), returns the title to use in the HTML header title
其他基本视图类¶
下面是 View
定义在 cubicweb.view
因为它们与应用程序中的数据呈现相关,所以更具体:
视图类示例¶
使用 templatable , content_type 和HTTP缓存配置
class RSSView(XMLView):
__regid__ = 'rss'
title = _('rss')
templatable = False
content_type = 'text/xml'
http_cache_manager = MaxAgeHTTPCacheManager
cache_max_age = 60*60*2 # stay in http cache for 2 hours by default
使用自定义选择器
class SearchForAssociationView(EntityView):
"""view called by the edition view when the user asks
to search for something to link to the edited eid
"""
__regid__ = 'search-associate'
title = _('search for association')
__select__ = one_line_rset() & match_search_state('linksearch') & is_instance('Any')
XML视图、二进制文件视图…¶
对于生成HTML以外格式的视图(例如动态生成的图像),以及不能简单包含在由主模板生成的HTML页面中的视图(参见上文),必须:
设置属性 templatable 全班同学 False
通过属性设置 content_type 类的,视图生成的mime类型 application/octet-stream 或任何相关和更专业的mime类型
对于专门用于创建二进制内容的视图(如动态生成的图像),我们必须设置属性 binary 全班同学 True (这意味着 templatable == False ,以便属性 w 视图的可替换为二进制流而不是Unicode)。