1. 程式人生 > >Haskell之Yesod開發–簡單網站開發(三)

Haskell之Yesod開發–簡單網站開發(三)

現在我們進入第五章的學習
首先複製P71頁的程式碼。這裡我們看到了很多新的東西,例如setTitle,toWidget,addScriptRemote,這些具體函式我們會在後面討論到。我們先複習一下前面的知識,來改寫一下現有的邏輯程式碼。

我們先增強一下網頁的正文內容,我們看到有一個

[hamlet|
    <h1>Here's one way of including content
|]

還記得我們上一章的總結麼,hamlet可以渲染其中的@{..}語法,但是需要接一個data->[(Text,Text)]->Text的函式
我們先來補充這樣一個data

和函式

data Fruits = Apple | Banana
renderFruits :: Fruits->[(Text,Text)]->Text
renderFruits Apple _ = "Apple"
renderFruits Banana _ = "Banana"

嗯,OK了。我們來做一個拼接

toWidget
    [hamlet|
    ...
    <a [email protected]{Apple}>apple
    |] renderFruits

Oh,不錯所料,出錯了,為什麼呢。因為[hamlet|..|] render

的結果型別為Text.Blaze.ToMarkup a,而toWidget需要的型別為MonadWidget m, ToWidget(HandlerSite m) a) a,那麼不匹配怎麼辦呢,別急,我們還有萬能的toHtml,toHtml::Text.Blaze.ToMarkup=>a -> Html

我們實際可以執行的程式碼如下

toWidget
    $ toHtml $[hamlet|
        ...
        <a [email protected]{Apple}>
    |] renderFruits

接下來我們處理僅替換變數的[hamlet||]

。我們看到

toWidgetHead
    [hamlet|
        <meta name=keywords content="some sample"
    |]

我們來試一下直接在後面新增where語句

data Fruits = Apple|Banana deriving Show
toWidgetHead
    [hamlet|
        <meta name=keywords content="some sample">
        <meta name=search content=#{show keywords}
    |] 
     where keywords=Apple

但是在這裡要注意,content=#{show keyword}當轉成Html時,會自動在content=之後的值兩側加上引號,所以#{..}會對其中的值做Encode,導致不能直接輸出字串{..}中,必須採用構造值的形式傳入,例如上述的例子。該問題影響面較廣,留待以後解決。

相關推薦

HaskellYesod開發簡單網站開發()

現在我們進入第五章的學習 首先複製P71頁的程式碼。這裡我們看到了很多新的東西,例如setTitle,toWidget,addScriptRemote,這些具體函式我們會在後面討論到。我們先複習一下前面的知識,來改寫一下現有的邏輯程式碼。 我們先增強一下網頁

HaskellYesod開發簡單網站開發(五)

設定網站Host instance Yesod XXX where approot = ApprootStatic "http://static.example.comn/wiki" 注意: 使用ApprootStatic的時候,URL是不需

HaskellYesod開發簡單網站開發(四)

Widget學習 複製P74頁的程式碼,來體驗一下toWidgetHead和toWidgetBody 複製P76頁的程式碼,我們來體驗一下如何組合widget 這段程式碼在我的電腦上會報錯。誰解決了請留個言 複製P77頁的程式碼,體驗一下newIden

HaskellYesod開發–邊踩坑邊開發(2)

今天繼續上一節的開發 今天我們需要具體的開發一個圖書館網站,分為以下幾個頁面 / HomeR GET 主頁 /login LoginR GET 使用者登入頁面 /library LibraryR GET 圖書館介紹頁面 /booklist BookList

HaskellYesod開發–邊踩坑邊開發(2.1)

按照書上第八章的內容,我們來建立一個表單。 程式碼無誤,但是有一點,預設的庫使用了Google的CDN。這在大區域網當然沒法用。我們來改造一下 首先我們要搞定自己的靜態資源(如果你有CDN,可以跳過這裡) 1.安裝yesod-static 安裝過程會提示有些庫找不到,可以一

使用IntelliJ IDEA開發SpringMVC網站)資料庫配置

六、資料庫配置       下面,就要通過一個簡單的例子,來介紹SpringMVC如何整合Spring Data JPA(由 Hibernate JPA 提供),來進行強大的資料庫訪問,並通過本章節的講解,更加深刻地認識Controller是如何進行請求處理的,相信看完這一

網站開發MyEclipse簡單實現JSP網頁表單提交及傳遞值

本文主要是作者《中小型網站開發與設計》課程的內容,非常基礎的文章,主要是指導學生學會用MyEclipse實現JSP網頁表單提交及傳遞引數。希望大家喜歡這篇文章,基礎文章,不喜勿噴~ 一. MyEclipse實現網頁動態表單提交 1.新建Web Service工程,名稱為te

用Django框架開發一個簡單的企業網站

接著之前的專案繼續深入開發,後臺和資料庫已經搞定,現在可以寫我們網站的功能了;就寫一個最簡單的功能,釋出企業新聞。開啟app內的models.py檔案,寫兩個資料模型類: from django.db import models class NewsClass(models.Model)

Flask專案手機端租房網站的實戰開發

說明:該篇部落格是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家! 接著上一篇部落格繼續往下寫 :https://blog.csdn.net/qq_41782425/article/details/85623829 注:在此專案中我不會使用程式碼塊插入程式碼,而是通過插入圖片來進行演

移動端web開發初探Vuejs的簡單實戰

參考 細節 重要 進行 標簽 樣式 mob 優化 view 這段時間在做的東西,是北郵人論壇APP的註冊頁。這個註冊頁是內嵌的網頁,因為打算安卓和IOS平臺同時使用。因此實際上就是在做移動端的web開發了。 在這過程中遇到了不少有意思的東西。 DEMO的github地址在這

php微信公眾號開發公牛牛房卡平臺搭建使用php7要註意的地方

mar shadow 公眾號開發 jpg oss 文檔 微信公眾號開發 dem proc 開啟微信公眾號開發三公牛牛房卡平臺搭建網站(h5.fanshubbs.com聯系Q1687054422),從微信開發文檔中下載demo 如下載php示例代碼 示例代碼中是使用“$GL

jeesite 框架搭建與吉林快配置網站開發環境部署

hub string div tab ips lec serve fan core 環境要求 1、吉林快三網站源碼(Q2947702644) 下載 2、Eclipse IDE for Java EE Mars 2 (4.5.2) 下載 3、Apache Maven 3.3+

Python開發簡單爬蟲靜態網頁抓取篇:爬取“豆瓣電影 Top 250”電影數據

模塊 歲月 python開發 IE 女人 bubuko status 公司 使用 目標:爬取豆瓣電影TOP250的所有電影名稱,網址為:https://movie.douban.com/top250 1)確定目標網站的請求頭: 打開目標網站,在網頁空白處點擊鼠標右鍵,

thinkPHP 框架開發極速快網站開發環境部署運行調試

fin core leg nco cts flush pom 中文 網站開發 環境要求 1、極速快三網站開發(Q2222168869) 下載 2、thinkPHP 框架開發各地快三玩法 下載 3、Apache Maven 3.3+ 下載 4、MySql 5.7+ 下載 導入

解決android studio 導快網站開發入module作為lib使用時不顯示的問題

android-l 顯示 manifest 若是 文件 sde tools follow idm 1.快三網站開發 haozbbs.com Q1446595067 將 android module導入 android project 中 這裏寫圖片描述 這裏寫圖片描述2.在

java實現PBOC的TL分V分彩網站開發格式解析,超簡單的解析

ica 取值 網站 pack 復合 tags default \n fault 簡介下TLV:分V分彩網站開發 haozbbs.com Q1446595067 PBOC基本信息數據采用TLV(tag-length-value)的表示方式,即每項由tag標簽(T),長度(L)

PHP開發遞歸算法的種實現方法

簡單的 靈活運用 要掌握 發布 容易 lob 實現原理 出現 無限分類 遞歸算法對於任何一個編程人員來說,應該都不陌生。因為遞歸這個概念,無論是在PHP語言還是Java等其他編程語言中,都是大多數算法的靈魂。對於PHP新手來說,遞歸算法的實現原理可能不容易理解。但是只要你了

java小白自己動手開發一個網站域名的申請(第4回)

新手小白,大神們看到什麼問題,請多多指出   目錄   域名的申請 域名的申請   之前想做部落格,聽說朋友用的阿里雲的域名很便宜,於是就過去申請了一個 登入賬號就是淘寶的賬號 地址: https://wanwang.al

java小白自己動手開發一個網站技術選型(第3回)

新手小白,大神們看到什麼問題,請多多指出 目錄     MyWeb技術選型 一、域名 二 、網站空間 三 、開發環境: 四、框架選擇 1.前段 2.後端 五、資料庫 六、伺服器 MyWeb技術選型 一、域名 來

java小白自己動手開發一個網站搭建一個網站需要啥(第2回)

新手小白,大神們看到什麼問題,請多多指出 目錄 新手小白,大神們看到什麼問題,請多多指出 搭建網站的流程 註冊域名 購買空間 製作網站 搭建網站的流程 搭建網站有哪些流程 1\註冊域名  2\購買空間  3\製作網站  &