Elixir 有没有办法从EEx模板中获取修改后的数据

Elixir 有没有办法从EEx模板中获取修改后的数据,elixir,plug,Elixir,Plug,我使用EEx模板引擎来呈现HTML页面(这里没有Phoenix)。我正在将连接(Plug.Conn)Conn连同提取的参数列表(params)和会话映射(session)一起传递到模板:body=EEx.eval_文件(路径,Conn:Conn,参数:Conn.params,session:session)params和session仅为方便起见而提供,因为它们也在连接中 如果页面修改会话(使用cookie配置),比如说使用类似),这会修改连接,但这也会保持页面的本地性,并且不会传播 有没有办法

我使用EEx模板引擎来呈现HTML页面(这里没有Phoenix)。我正在将连接(
Plug.Conn
Conn
连同提取的参数列表(
params
)和会话映射(
session
)一起传递到模板:
body=EEx.eval_文件(路径,Conn:Conn,参数:Conn.params,session:session)
params
session
仅为方便起见而提供,因为它们也在连接中

如果页面修改会话(使用cookie配置),比如说使用类似
),这会修改连接,但这也会保持页面的本地性,并且不会传播

有没有办法从EEx引擎检索此修改版本的连接


注意:我说的是连接(
Plug.Conn
),但它可以是模板引擎修改或创建的任何变量,就像
code.eval_字符串(“a=1\n b=2\n c=a+b”)
所做的:
{3[a:1,b:2,c:3]}

EEx.eval_文件
EEx.eval_字符串
都返回
字符串
类型,它们不返回更新的绑定(就像您所说的那样,
code.eval_字符串
返回)

我认为这背后的原因是希望
render
函数没有副作用(如数据库调用或会话修改)

您不希望在模板中包含业务逻辑,而是希望将其放在控制器或数据层中(这样做的好处是您可以单独测试它)

也许是离题的,但如果您来自PHP背景(您可以将所有代码放在一个看起来像HTML模板的文件中),这可能是造成混淆的原因

更新 但这可能会奏效:

quoted = EEx.compile_string("<%= c = a + b %>")
{result, bindings} = Code.eval_quoted(quoted, [a: 1, b: 2])

Keyword.fetch(bindings, :c) # {:ok, 3}
quote=EEx.compile\u字符串(“”)
{result,bindings}=Code.eval_quoted(quoted[a:1,b:2])
关键字.fetch(绑定,:c)#{:好的,3}

我知道这一点,我同意你的看法。我不是在谈论conn的副作用,而是在它通过EEx引擎后获得它的更新副本,就像它通过plug@mszmurlo回答更新聪明!这也说明了长生不老药是一种强大的语言。谢谢