【问题标题】:Error in a Phoenix template listPhoenix 模板列表中的错误
【发布时间】:2017-07-01 04:47:39
【问题描述】:

我正在尝试从模板中的列表 (<%= @evento %>) 中提取值,但出现此错误:

lists in Phoenix.HTML and templates may only contain integers representing bytes, binaries or other lists, got invalid entry: %Skeleton.News.Evento{__meta__: #Ecto.Schema.Metadata<:loaded, "news_eventos">, date: "DEZ 2011", id: 69, imgPaths: ["images/fabasa/eventos/one/1.jpg", "images/fabasa/eventos/one/2.jpg", "images/fabasa/eventos/one/3.jpg", "images/fabasa/eventos/one/10.jpg"], inserted_at: ~N[2017-06-30 12:38:15.452214],...  

那么,我的问题是如何将它转换为我仍然可以在我的模板中迭代的数据类型结构?

【问题讨论】:

    标签: phoenix-framework


    【解决方案1】:

    您不能在模板中打印这样的列表,因为模板只允许打印 iolist,它们是包含整数、二进制文件(在 Elixir 中也称为 String)或 iolist 的列表。

    如果您想打印列表的inspect 表示(您在iex 中看到的那个),您可以这样做:

    <%= inspect @evento %>
    

    要遍历列表,可以使用for

    <%= for event <- @evento %>
      <%= event.id %>
    <% end %>
    

    【讨论】:

    • 是的,正确,但是当我做&lt;%= inspect i.imgPaths[0] %&gt;(这是我的最终目标)时,我收到一个错误:the Access calls for keywords expect the key to be an atom, got: 0,我不明白为什么,因为它是一个字符串列表.. .
    • 您不能对列表使用括号索引。您可以使用Enum.at(i.imgPaths, 0) 或只使用hd(i.imgPaths),它会返回列表的头部。
    • 天哪……是的。谢谢!
    • @Dogbert 我认为您在第一行缺少do&lt;%= for event &lt;- @evento do %&gt;
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多