10 View engines 視圖引擎(Nancy 官方文檔翻譯)

原文地址 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錯誤而不會再吃常吃。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章