2017-04-22 11 views
0

Selmerテンプレートの現在のページURLにアクセスして編集ページアクションに渡して、このページに編集後でも「呼び出し」ページに戻るリンクを含めることができます。すべてのテンプレートでリクエストマップに簡単にアクセスできますか?

は、ここに私のセルマーテンプレートのテンプレートコードだ - これはOKらしい:

<a href="/photos/_edit/{{p.path}}{% if back %}?back={{back}}{% endif %}" 
     class="btn btn-warning btn-sm">edit</a> 

はここで検索するときに、私は戻って値を設定する方法は次のとおりです。これはOK作品

(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

あなたが試みる可能性のあるアプローチは、自分のrender関数を作成して、selmer'sをラップし、すべてのページで必要な共通の機能を提供することです。ような何か:

(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)))) 

(私は本当に彼らは間違いなく、それを正当化するためのスレッドで十分なリンクでなくても、ルートでスレッドのマクロを使用するようないくつかの理由...)

関連する問題