gpt4 book ai didi

Erlang erlydtl 渲染 mnesia 记录

转载 作者:行者123 更新时间:2023-12-02 06:01:35 27 4
gpt4 key购买 nike

我有以下记录定义:

-record(contact, {name, email})

假设我在 mnesia 数据库中已经有一些联系人,并且我想在 html 页面上使用 erlydtl 呈现它们,我首先查询数据库:


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

将我的联系人存储在 Contacts 变量中,并有一个 contacts.html 文件,我尝试将其呈现为这样(下面的代码发生在错误回调中):


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

contacts.html 文件如下:


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

上面的显然不行。救命!

谢谢。

-

最佳答案

我希望存在更好的解决方案,但是您可以定义一个辅助函数,例如:

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))).

关于Erlang erlydtl 渲染 mnesia 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com