Работа с маршрутами и HTML (Heist) в Snap
У меня есть шаблоны (*.tpl
) в my-snap-app/snaplets/heist/templates
(main.tpl
, page1.tpl
, page2.tpl
, page3.tpl
). А вот мой Main.hs
:
import Snap.Http.Server
import Snap.Core
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Util.FileServe
import Snap.Util.GZip
import Heist.Interpreted
import Heist
--.......
data App = App { _heist :: Snaplet (Heist App) }
makeLenses ''App
instance HasHeist App where
heistLens = subSnaplet heist
Как я могу:
а) Сделать все шаблоны доступными в моем веб-приложении? То есть я хочу иметь доступ page1.tpl
, page2.tpl
, page3.tpl
на localhost://page1
, localhost://page2
, localhost://page3
, Должен ли я обязательно добавлять маршрут для каждой страницы или я могу добавить маршрут, чтобы сделать их доступными сразу?
2) main.tpl
это основной шаблон (макет). Как я могу сделать page[123]
использование main.tpl
в качестве основного шаблона макета?
1 ответ
Snaplet Heist имеет функцию serveHeist
это очень похоже на serveDirectory
, Это будет служить для всех шаблонов в шаблонах / на маршрутах. У пикши есть еще несколько деталей, например, скрытие определенных шаблонов, которые сами по себе не имеют смысла.
Для составления различных шаблонов думайте о шаблонах как о функциях - вы можете применять их к другим шаблонам, и в результате вы получите сам шаблон. Все это происходит в самом ограблении, а не в оснастке.
<apply>
Тег выполняет функцию приложения. Аргументом является содержание внутри <apply>
например, в page1.tpl
:
<apply>
<h1>I'm a function parameter</h1>
</apply>
Применяемая функция main.tpl
и параметр <apply-content>
:
<html><head></head>
<body>
<h1>Main template.</h1>
<apply-content/>
</body>
</html>
Использование <apply>
а также <apply-content>
выполнить функцию приложения и вычислить полную страницу, которая будет доступна на /page1
маршрут.
В руководстве по ограблению есть намного больше объяснений. Интересно, полезна ли аналогия функции-приложения для запоминания большего количества ограбления API.