原文地址 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]; };
視圖名通過如下信息提供了更大易用性:
視圖文件名是指定類型的擴展名
對於沒有指定擴展名的視圖文件(比如“products”),如果有兩個活更多的視圖文件相同名稱,並且不同擴展名,你將會獲得一個
AmbiguousViewsException
異常,其中有關於視圖衝突位置的詳細內容。一個相對於應用程序目錄的相對路徑,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錯誤而不會再吃常吃。