Erlang Erlydtl рендеринга Mnesia записи - PullRequest
3 голосов
/ 05 ноября 2011

У меня есть следующее определение записи:

-record(contact, {name, email})

Предполагая, что у меня уже есть несколько контактов в базе данных mnesia, и я хочу отобразить их с помощью erlydtl на HTML-страницеСначала я запрашиваю базу данных:

<code>F = fun() -> qlc:e(qlc:q([X || X <- mnesia:table(contact)])) end,{atomic, Contacts} = mnesia:transaction(F).

Сохраняя мои контакты в переменной Contacts и имея файл contacts.html, я пытаюсь сделать это так (приведенный ниже код происходит внутри обратного вызова misultin):

<code>erlydtl:compile("contacts.html", contacts),contacts:render(Contacts).

Файл contacts.html имеет следующий вид:

<code>{% for contact in contacts %}{{ contact.name }}{{ contact.email }}{% endfor %}

Выше явно не работает.Помогите!

Спасибо.

-

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Я надеюсь, что есть более удачное решение, но вы можете определить вспомогательную функцию, например:

contact_to_list(C) ->
    lists:zip(record_info(fields, contact), tl(tuple_to_list(C))).

И передайте это ErlyDTL:

your_template:render([{contact, contact_to_list(C)}]).

ОБНОВЛЕНИЕ : Если вы хотите сделать это 'динамическим', чтобы вы могли передавать переменную вместо атома в record_info, вы можете использовать преобразование 'exprecs':

http://doc.erlagner.org/parse_trans/exprecs.html

Как правило, после добавления приложения parse_trans в качестве зависимости вы можете добавить в свой модуль следующее:

-compile({parse_transform, exprecs}).
-export_records([
    contact
]).

И тогда у вас будет новая динамическая функция:

record_to_list(Rec, RecName) ->
        lists:zip('#info-'(RecName), tl(tuple_to_list(Rec))).
2 голосов
/ 05 января 2012

mochiweb_util обеспечивает record_to_proplist/2 и record_to_proplist/3, которые прекрасно работают.Они также динамичны в отношении записей, которые вы передаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...