原则

我们将从接口的描述开始,提供对可用类和方法的基本理解,然后详细介绍视图选择原则。

A View 是负责将模型中的数据呈现为最终用户可使用表单的对象。它们通常会产生一个XHTML流,但也有一些视图关注电子邮件和其他非HTML输出。

发现可能的视图

可以将Web用户界面配置为在左侧框中显示可应用于当前结果集的所有视图。

要启用此功能,请单击右上角的登录名。在验证更改之前,选择“用户首选项”,然后选择“框”,然后选择“可能的视图框”,并选中“可见=是”。

这里列出的视图要么因为分数较低而没有被选中,要么被主模板逻辑故意排除在外。

视图的基本类

等级 View

视图的基本界面如下(请记住,结果集有一个表格结构,包含行和列,因此是单元格):

  • render(**context) ,通过调用 callcell_call 取决于上下文

  • call(**kwargs) ,调用视图以获取完整的结果集或空值(默认实现调用 cell_call() 在结果集的每个单元格上)

  • cell_call(row, col, **kwargs) ,调用结果集的给定单元格的视图 (rowcol 是用来访问单元的整数)

  • 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 因为它们与应用程序中的数据呈现相关,所以更具体:

视图类示例

  • 使用 templatablecontent_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)。