Clojure 在每个selmer模板中访问请求映射的简单方法?
我想访问Selmer模板中的当前页面URL,这样我就可以将其传递给编辑页面操作,这样即使在编辑之后,该页面也可以包含回“调用”页面的链接 以下是我的Selmer模板中的模板代码——这似乎还可以:Clojure 在每个selmer模板中访问请求映射的简单方法?,clojure,compojure,luminus,selmer,Clojure,Compojure,Luminus,Selmer,我想访问Selmer模板中的当前页面URL,这样我就可以将其传递给编辑页面操作,这样即使在编辑之后,该页面也可以包含回“调用”页面的链接 以下是我的Selmer模板中的模板代码——这似乎还可以: <a href="/photos/_edit/{{p.path}}{% if back %}?back={{back}}{% endif %}" class="btn btn-warning btn-sm">edit</a> 以下是我在搜索时如何设置返回值:
<a href="/photos/_edit/{{p.path}}{% if back %}?back={{back}}{% endif %}"
class="btn btn-warning btn-sm">edit</a>
以下是我在搜索时如何设置返回值:
(defn照片搜索[文字请求]
(布局/渲染)
“search.html”
{:单词
:照片(db/带有关键字起始词的照片)
:back(str(:uri req)“?”(:查询字符串req))
}))
;; ...
(二)母路
;; ...
(获取“/photos/_search”[word:as-req](照片搜索词req))
这是可行的。但是我有其他方法返回照片列表,将此代码添加到所有其他方法中似乎违反了DRY原则
是否有一种更简单的方法可以做到这一点,也许可以使用一些中间件?您可以尝试的一种方法是创建自己的
呈现
函数,该函数包装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))))
(出于某种原因,我真的很喜欢在路由中使用线程宏,尽管它们在线程中的链接不足以证明其合理性…)