使用查询参数呈现网址

Lambdas

找不到简单问题的解决方案,答案应该很明显。如何在哈姆雷特模板中使用查询参数呈现url?

@{ItemsR}会生成http://localhost:3000/items,我如何生成类似的东西http://localhost:3000/items?page=10&sort=name

九州

Yesod是RESTful的,/items/page/10/sortby/name如果您希望使用QueryString格式,则应使用url格式的参数(例如,这样会丢失Yesod类型的安全url管理。

下例显示了如何使用不同的RESTful表示形式以及如何重定向到请求(从查询字符串中读取参数)(呈现查询字符串url)

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultiParamTypeClasses #-}
import Yesod
import Data.Text
import Network.Wai.Handler.Warp (run)

data RouteTest = RouteTest

mkYesod "RouteTest" [parseRoutes|
/item/all/page/#Int/sortby/#Text Items1R GET
/items/page/#Int/sortby/#Text Items2R GET
/items/#Int/#Text Items3R GET
/itemsquery ItemsQueryR GET
|]

instance Yesod RouteTest where
    defaultLayout widget = do
        pc <- widgetToPageContent widget
        hamletToRepHtml [hamlet|\<!DOCTYPE html><html lang="en"><body>^{pageBody pc}</body></html>|]

getItemsR :: Text -> Int -> Text -> HandlerT RouteTest IO Html
getItemsR path page sortby =
  defaultLayout [whamlet|
    <h1>Items Page ##{page} sorted by #{sortby}
    <h4>(Using #{path} path format)
    <p>Same request in query string format
      <a href="@{ItemsQueryR}?page=#{page}&sort=#{sortby}">
        here
  |]

getItems1R = getItemsR $ pack "large"
getItems2R = getItemsR $ pack "medium"
getItems3R = getItemsR $ pack "short"

getItemsQueryR = do
  req <- getRequest
  defaultLayout [whamlet|
    <h1>Query String arguments format
    <ul>
      $forall (k, v) <- reqGetParams req
        <li>
          <b>#{k}</b>: #{v}
  |]

main = run 8181 =<< toWaiApp RouteTest

当然,您可以编写一个帮助程序来接受像您这样的帮助 @{ItemsR page sortby}

renderItemsQueryR page sortby = hamletToRepHtml [hamlet|@{ItemsQueryR}?page=#{page}&sort=#{sortby}|]

但您必须使用

...
url <- renderItemsQueryR page sortby
defaultLayout [whamlet|
    ...
    <a href=#{url}>
    ...
|]

最后,您可以编写其他助手来呈现任何querystring url

renderQueryString path keyValues = do
  let querystring = intercalate "&" $ map (\(k, v) -> concat [k, "=", v]) keyValues
  hamletToRepHtml [hamlet|@{path}?#{querystring}|]

然后,renderItemsQueryR可以写成

renderItemsQueryR page sortby = renderQueryString ItemsQueryR [("page"  , show page)
                                                              ,("sortby", sortby   )]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用查询参数呈现网址

来自分类Dev

使用Nginx将查询参数嵌入Wordpress网址中

来自分类Dev

如何获取网络应用网址的查询参数?

来自分类Dev

动态删除网址中查询参数的空间

来自分类Dev

AMP 网址是否保留查询参数?

来自分类Dev

传递查询参数以在Rails中呈现

来自分类Dev

使用基于查询字符串参数的HTTP身份验证保护网址

来自分类Dev

清除所有查询字符串/网址参数php,但使用值

来自分类Dev

Laravel使用参数生成网址

来自分类Dev

呈现JSON响应网址

来自分类Dev

django-autocomplete-light向查询网址添加参数

来自分类Dev

Ember.js中查询参数的网址编码

来自分类Dev

显示隐藏查询参数的网址不起作用

来自分类Dev

如何从PHP网址获取参数并用于查询结果

来自分类Dev

如何从PHP网址获取参数并用于查询结果

来自分类Dev

使用链接网址@发送参数inThymleaf

来自分类Dev

使用RewriteRule .htaccess获取此参数网址

来自分类Dev

如何使用网址参数进行调试

来自分类Dev

使用参数创建网址的javascript函数

来自分类Dev

使用jQuery或JavaScript从网址中删除参数

来自分类Dev

使用链接网址@发送参数inThymleaf

来自分类Dev

网址中带有参数的改造的使用

来自分类Dev

在Rails中使用Ajax呈现查询

来自分类Dev

使用PHP在SOAP查询中呈现的数组

来自分类Dev

如何使用Stream Analytics查询呈现JSON

来自分类Dev

无法使用查询参数

来自分类Dev

无法使用查询参数

来自分类Dev

如果网址的参数发生更改,则重新加载/重新呈现页面-反应

来自分类Dev

使用htaccess删除了参数,但仍然具有清理网址和参数网址