2012-01-12 50 views
0

使用站點地圖,可以設置某些路徑以處理前綴匹配,並允許爲子路徑提供請求。我想指定給定路徑下的所有請求都轉到某個模板。所以我想:定義要在站點地圖中使用的模板

Menu(Loc("show_theme", Link("show" :: "theme" :: Nil, true, "/show/theme"), "Show Theme")) 

地搭上/表演/主題/ *(它一定支持)所有要求,但在使用/顯示/主題模板(它不)

爲他們服務

我想要(例如)/ show/theme/1在/ show/theme中使用該模板,並使用該模板中的代碼片段將該ID從Req中取出。

這可能嗎?還是我以錯誤的方式做事?目前,我正在使用/ show_theme?theme = 1,但是這有點難看,並且使得難以使用表格

編輯:我試圖擺脫使用CGI params來編碼ID,並且將它們作爲路徑結構的一部分

回答

2

Loc代表一個頁面和一個模板。如果您想要將多個URL映射到Loc,而不想使用Lift的URL重寫。例如:

LiftRules.statefulRewrite.append { 

    case RewriteRequest(ParsePath("show" :: "theme" :: theme :: Nil, _, _, _), _, _) => 
    RewriteResponse(ParsePath("show_theme" :: Nil, "", true, false), Map("theme" -> theme), false) 

} 

什麼,將要做的就是比賽的請求/表演/主題/ *和重寫他們/ show_theme主題= {}主題?你他們創建你的Loc來響應這個URL,你訪問主題變量作爲查詢參數(S.param(「theme」))。

注意:您可以使用Loc DSL更簡潔地做到這一點,但我認爲很好理解幕後發生的事情。

如果您需要更多幫助,我建議您發佈信息到Lift Google Group。我想你會在這裏找到更快的答案。

+0

好的,這很有幫助,但它並不完全符合我的要求 - 我試圖澄清這個問題。我不確定Loc總是代表一個頁面/模板,但是 - 使用前綴匹配,它可以是任意數量的頁面/模板。我想用單個模板將其轉換爲任意數量的頁面,但要避免CGI params。 – 2012-01-12 18:50:15

+0

我提供的示例代碼並不要求URL實際包含任何查詢參數,它將括號中的/ show/theme/{主題}部分重寫,以使其看起來像查詢參數一樣,就您的片段而言。 – 2012-01-12 20:34:12

+0

Ooops,我的誤解 - 我(愚蠢地)認爲它會導致重定向,但當然不是這種情況。我必須在第一個列表的末尾添加一個Nil(「show」::「theme」:: theme :: Nil),但它完美地工作,謝謝! – 2012-01-12 21:14:14

相關問題