2017-04-22 15 views
0

내 Selmer 템플릿의 현재 페이지 URL에 액세스하여 편집 페이지 작업에 전달할 수 있도록하여이 페이지에 편집 후 '호출'페이지로 돌아갈 수있는 링크를 포함시킬 수 있습니다.모든 selmer 템플릿에서 요청 맵에 쉽게 액세스 할 수 있습니까?

여기 내 셀마 템플릿의 템플릿 코드입니다 -이 OK 보인다

<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

시도해 볼 수있는 한 가지 방법은 selmer 's를 래핑하고 모든 페이지에서 원하는 공통 기능을 제공하는 고유 한 render 기능을 만드는 것입니다. 뭔가 같은 :

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

(어떤 이유 정말 ... 자신이 틀림없이 그것을 정당화하는 스레드에 충분한 링크가없는 경우에도 불구하고, 루트에서 스레딩 매크로를 사용하여 같은)