Phoenix.Template.UndefinedError:访问/api/todos无法渲染index.json
问题排查与解决
问题原因
代码里的render函数使用了单引号定义模板名称(比如'index.json'),但Phoenix框架匹配模板时期望的是双引号字符串("index.json")。Elixir中,单引号对应字符列表(charlist),双引号对应字符串(string),两者类型不匹配,导致Phoenix无法找到对应的渲染函数。
修复后的代码
修改todo_view.ex中的模板名称,将所有单引号替换为双引号:
defmodule TodoApiWeb.TodoView do use TodoApiWeb, :view alias TodoApiWeb.TodoView def render("index.json", %{todos: todos}) do render_many(todos, TodoView, "todo.json") end def render("todo.json", %{todo: todo}) do %{ id: todo.id } end end
额外注意事项
- 移除了
todo.json渲染函数中id: todo.id,末尾的逗号,避免Elixir编译警告(不影响运行,但符合规范写法)。 - 重启Phoenix服务器,确保代码修改生效。
内容的提问来源于stack exchange,提问作者techmsi
相关产品推荐
相关产品推荐

