我想访问我的Selmer模板中的当前页面网址,以便我可以将其传递给编辑页面操作,以便此页面可以包含一个返回“调用”的链接。页面甚至编辑后。
这是我的Selmer模板中的模板代码 - 这似乎没问题:
<a href="/photos/_edit/{{p.path}}{% if back %}?back={{back}}{% endif %}"
class="btn btn-warning btn-sm">edit</a>
以下是我在搜索时设置后退值的方法:
(defn photo-search [word req]
(layout/render
"search.html"
{:word word
:photos (db/photos-with-keyword-starting word)
:back (str (:uri req) "?" (:query-string req))
}))
;; ...
(defroutes home-routes
;; ...
(GET "/photos/_search" [word :as req] (photo-search word req))
这很好用。但是,我有其他方法返回照片列表,似乎违反DRY原则将此代码添加到所有其他方法。
有没有更简单的方法来实现这一点,可能还有一些中间件?
答案 0 :(得分:0)
您可以尝试的一种方法是创建自己的render
函数,该函数包装selmer并在每个页面上提供您想要的常用功能。类似的东西:
(defn render
[template request data]
(let [back (str (:uri req) "?" (:query-string req))]
(layout/render template (assoc data :back back))))
(defroutes home-routes
(GET "/photos/" [:as req]
(->> {:photos (db/recent-photos)}
(render "list.html" req)))
(GET "/photos/_search" [word :as req]
(->> {:word word
:photos (db/photos-with-keyword-starting word)}
(render "search.html" req))))
(出于某种原因,我真的很喜欢在路由中使用线程宏,即使它们可能在线程中没有足够的链接来证明它......)