Динамическое добавление маршрутов в compojure

Привет, ребята. У меня есть сайт в стиле «иерархия» в compojure с объявлением deroutes следующим образом:

(defroutes main-routes
  (GET "/" [] (resp/redirect "/public/index.html")
  (GET "/blog" [] (resp/redirect "/public/blogs/index.html")
  (GET "/tools" [] (resp/redirect "/public/tools/index.html"))

Однако я хотел бы, чтобы эти страницы были более динамичными, то есть я хотел бы, чтобы страница index.html генерировалась путем сканирования содержимого каталога /blog, а также для маршрута /tools.

То есть в итоге я бы хотел, чтобы маршруты выглядели так:

(defroutes main-routes
      (GET "/" [] (resp/redirect "/public/index.html")
      (GET "/blog" [] (generate-index "/public/blog"))
      (GET "/tools" [] (generate-index "/public/tools")))

Есть ли простая дорожная карта для создания динамических путей через мой сайт через compojure?

Более конкретно ---- есть ли какие-либо предложения о том, как создать функцию (генерировать индекс), которая сканирует введенный путь и возвращает ссылки на все файлы? Я предполагаю, что в compojure уже может быть такая функция, учитывая недавнее появление очень многих платформ для ведения блогов, основанных на этом типе идиомы.


person jayunit100    schedule 24.05.2012    source источник


Ответы (1)


Делать большую часть того, что вы сказали, довольно просто.

Есть две вещи, на которые вам следует обратить особое внимание, а также некоторые общие сведения, которые помогут вам понять, что происходит.

Во-первых, вы захотите взглянуть на какой-либо инструмент для создания шаблонов HTML. Хотя можно просто построить необходимые строки, все будет проще, если вы их используете. Я видел для них два разных основных стиля, и какой из них выбрать, зависит от ваших вкусов.

  • Hiccup занимается преобразованием структур данных Clojure в HTML.
  • Enlive ориентирован на получение файлов шаблонов HTML и преобразование их в правильную конечную форму.

Для фактического получения списка файлов рассмотрите возможность использования file-seq . Преобразуйте имя файла в соответствующее имя сообщения и файл, а затем используйте его в качестве данных для создания ссылок на страницы.

Еще одна вещь, о которой вы захотите узнать больше, это шаблоны маршрутов Compojure и немного больше об ответах на звонки.

Шаблоны маршрутов Compojure упрощают передачу параметров маршрута, из которых затем можно генерировать ответы. Далее следует простой пример, который обслуживает простой статический html-файл, используя в качестве параметра имя html-страницы.

(GET "/blog/:post" [post] (ring/file-response (str "/public/blogs/" post ".html")))

Наконец, подумайте о том, чтобы прочитать остальные вики Compojure и Ring. Вики Ring дает очень хорошую информацию о том, «как все работает». Вики Compojure предоставляет несколько хороших примеров того, как лучше всего использовать Compojure, который просто фокусируется на предоставлении простого, но далеко не единственного способа обработки маршрутов и упрощения генерации страниц для Ring.

В зависимости от того, куда вы хотите переместить сайт, я бы также рассмотрел возможность взглянуть на Noir, который представляет собой фреймворк, делает хорошую работу по сбору всех частей и решению некоторых общих проблем в процессе.

person deterb    schedule 24.05.2012