在Phoenix模板

时间:2016-07-23 16:38:16

标签: elixir phoenix-framework

我试图在模板中简单地显示一些数据。但显然我错过了一步。

使用HTTPoison请求

use HTTPoison.Base

@expected_fields ~w(result)   

def process_url(url) do
 "url.json"
end

def process_response_body(body) do
  body
  |> Poison.decode!
  |> Map.take(@expected_fields)
  |> Enum.map(fn({k ,v}) -> {String.to_atom(k), v} end)
end

控制器

 def index(conn, _params) do
  response = ApiTest.get!("").body[:result]
  render conn, "index.html", response: response
 end

模板

<%= @response %>

错误是:  Phoenix.HTML和模板中的列表可能只包含表示字节,二进制或其他列表的整数,得到无效条目

那么我在哪里将数据转换为可以在模板中显示的格式?

1 个答案:

答案 0 :(得分:3)

从错误消息中,响应JSON中的result键看起来像是包含列表的列表。如果您希望输出用于调试,则有两种常用方法可以使用Kernel.inspect来获取iexPoison.encode!中的表示形式以获取JSON表示形式:

<%= inspect(@response) %>

<%= Poison.encode!(@response) %>

您可能希望将整个内容包装在<pre>标记中,以便在inspect中获得精美的包装输出:

<pre><%= inspect(@response) %></pre>

或执行此操作+为pretty: true添加Poison.encode!

<pre><%= Poison.encode!(@response, pretty: true) %></pre>