原文地址 https://github.com/NancyFx/Nancy/wiki/View-engines

视图引擎的任务很简明-通过一个模板和可选的模型(数据)输出HTML到浏览器中。默认情况下,Nancy内见到视图引擎是SuperSimpleViewEngine支持所有必须的如布局、片段、模型、条件以及迭代器。妳可以无需任何配置直接使用他解析 .html和 .sshtml模板文件。

下面是一个.sshtml 文件是什么样子的一个示例:

@Master['MasterPage']

@Section['Content']
    <p>This content from the index page<p>
    <h3>Partials</h3>
    <p>Login box below rendered via a partial view with no model.</p>
    <div id="login">
        @Partial['login'];
    </div>
    <p>Box below is rendered via a partial with a sub-model passed in.</p>
    <p>The submodel is a list which the partial iterates over with Each</p>
    <div id="users">
        @Partial['user', Model.Users];
    </div>
    <h3>Encoding</h3>
    <p>Model output can also be encoded:</p>
    <p>@!Model.NaughtyStuff</p>
@EndSection

此外Nancy内建的引擎还支持 Razor, Spark, NDjango and the dotLiquid视图引擎。每个引擎作为独立的库,使用时候仅需要添加对应库的引用,Nancy即可自动渲染对应扩展名的视图。

 通过路由动作来渲染页面

渲染一个视图你可以使用NancyModule 中的视图渲染器,附带上适合的参数。或许听起来似乎有些复杂,但是事实上……真心的不复杂。可以允许通过视图名、模型或者两者的组合三种载荷方式,Nancy为你完成之后数据处理,以及视图定位的一些约定,下面我们将探讨这些约定:

Get["/products"] = parameters => {
    return View["products.html", someModel];
};

视图名通过如下信息提供了更大易用性

  1. 视图文件名是指定类型的扩展名

  2. 对于没有指定扩展名的视图文件(比如“products”),如果有两个活更多的视图文件相同名称,并且不同扩展名,你将会获得一个 AmbiguousViewsException 异常,其中有关于视图冲突位置的详细内容。

  3. 一个相对于应用程序目录的相对路径,Nancy会自动查找对应视图文件,如(products/products.html)。

获取Nancy查找视图文件的更多信息以及定制处理逻辑,请 check out View location conventions


 从模型解析视图的名称 

如果你只传递一个模型到视图索引器,Nancy将尝试使用默认规则推断出视图文件的名字和位置。

规则是从模型类型移除后边的"Model"(如 ProductsModel会转换为products),并且使用这个名字尝试定位视图文件。

在下面的路由中,Nancy将尝试定位视图到名称为Products 、并且带有扩展名一个文件,可以匹配到所有已安装的视图引擎:

Get["/products"] = parameters => {
    return View[new ProductsModel()];
};

作为新的Content Negotiation内容协商特性出现在 0.12版中,如果Nancy不能找到视图文件,服务器会返回406错误而不会再吃常吃。