Forgive me for asking maybe an obvious question, but I am wondering how to use EEx to produce a single output from multiple .eex files. I have looked at the docs but I must be missing something – it does not look familiar to templating I have seen in other languages.
For example, can someone explain please the differences between these 2 statements?
iex> EEx.eval_string("foo <%= bar %>", bar: "bar")
# foo bar
iex> EEx.eval_string("foo <%= @bar %>", assigns: [bar: "bar"])
# foo bar
They are same, no? I am not understanding what difference @
makes – is it just a shortcut for this?
EEx.eval_string("foo <%= assigns[:bar] %>", assigns: [bar: "bar"])
I guess I do not understand why assigns
is a special keyword.
But really my question is how to bring together multiple files. This is not for phoenix, this is just a CLI app that must return some text. In PHP I might do something like this (sorry this maybe is not valid PHP):
<?php include("header.php"); ?>
<?php print($contents); ?>
<?php include("footer.php"); ?>
With EEx am I correct that I must build the variables myself? Like this maybe? (but maybe using function_from_file
):
header = EEx.eval_string("My header", [])
footer = EEx.eval_string("My footer", [])
template = """
<%= header %>
<%= content %>
<%= footer %>
"""
EEx.eval_string(template, header: header, content: "Something", footer: footer)
|> IO.puts()