Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在每个selmer模板中访问请求映射的简单方法?_Clojure_Compojure_Luminus_Selmer - Fatal编程技术网

Clojure 在每个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> 以下是我在搜索时如何设置返回值:

我想访问Selmer模板中的当前页面URL,这样我就可以将其传递给编辑页面操作,这样即使在编辑之后,该页面也可以包含回“调用”页面的链接

以下是我的Selmer模板中的模板代码——这似乎还可以:

<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))))
(出于某种原因,我真的很喜欢在路由中使用线程宏,尽管它们在线程中的链接不足以证明其合理性…)