Как я могу включить hamletfile в другой с помощью widgetFile?

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

Следующее содержимое blog.hamlet не работает:

$forall post <- posts
    ^{widgetFile "blogpost")

Итак, каков правильный синтаксис для встраивания одного виджета в другой?


person mrueg    schedule 28.05.2012    source источник


Ответы (1)


Синтаксис Hamlet не поддерживает встраивание в него сплайсов Template Haskell, что делает код, который вы хотите сделать, невозможным. Вместо этого вам нужно создать вспомогательную функцию в Haskell, например:

blogpost post = $(widgetFile "blogpost")

Затем в blog.hamlet вы можете иметь:

$forall post <- posts
    ^{blogpost post}
person Michael Snoyman    schedule 29.05.2012
comment
Это не работает внутри defaultLayout? У меня есть сайт-скаффолд, и я пытаюсь сделать что-то очень похожее, и получаю: Foundation.hs:73:27: Not in scope: ‘loginArea’ In the splice: $(hamletFile "templates/default-layout-wrapper.hamlet") - person Andrew Boardman; 09.05.2015
comment
Не видя остального кода, я не могу знать наверняка, но это выглядит как отдельная ошибка. А именно, идентификатор, который вы пытаетесь использовать, не входит в область действия. - person Michael Snoyman; 09.05.2015