В Heist, когда вы делаете что-то, что включает вычисления для динамических данных, вы обычно будете использовать соединение Ваши первые две точки могут быть обработаны с помощью связующих соединений Что касается третьего пункта, я бы начал с создания функции сплайсинга, которая отображает конкретный шаблон вопроса. Это будет выглядеть примерно так:
questionSplice :: Monad m => Int -> Splice m
questionSplice n = do
splices <- setupSplicesForThisQuestion
mTemplate <- callTemplate (B.pack ("qu"++(show n))) splices
return $ fromMaybe [] mTemplate
Теперь вы можете создать соединение для списка вопросов опроса:
surveyQuestions :: Monad m => Splice m
surveyQuestions = do
questions <- getSurveyQuestions
mapSplices questionSplice questions
Затем вы можете привязать это соединение к определенному тегу и использовать его где угодно в qu.tpl или любом другом шаблоне.
Важной частью здесь является функция callTemplate. Это функция Heist для рендеринга шаблонов из вычисления TemplateMonad. Я не думаю, что об этом много говорится в руководствах, потому что это не тот случай использования, которым обычно занимаются люди, и его легко пропустить в документации по API.