Using template engine without Phoenix?

Disclaim: I am rather new to Elxiir and Phonix, though I do have some experience in other languages.

As far as I understand, a template engine, or its compile function, is something that takes a template and assigns, replaces some specially marked elements in the template, and returns a string. So theoretically this function can be used without Phoenix and its model-view-controller architecture. Unfortunately, I cannot seem to find any example of applying it this way. The documentation only says

compile(template_path :: binary, template_name :: binary) :: Macro.t

Can anybody give me an example of how to apply this function? I tried Phoenix.Template.EExEngine.compile('.', "a.eex"), but got the error message

(ArgumentError) template paths in Phoenix require the format extension, got: a.b
    (phoenix_template 1.0.4) lib/phoenix/template/eex_engine.ex:19: Phoenix.Template.EExEngine.options_for/1
    (phoenix_template 1.0.4) lib/phoenix/template/eex_engine.ex:9: Phoenix.Template.EExEngine.compile/2
    iex:43: (file)

IMO that particular boundary isn’t intended to be used separately - compile/2 is an interface for template engines to “plug into” Phoenix.Template.compile_all and similar functions, so there’s a lot of supporting code needed around it.

The underlying library, EEx has significantly better documentation and would be a better place to start.

1 Like

The last time i stole got inspired from phoenix embedded engine, it was straightforward. You can look at the source of ~H sigil here.

Since this sigil is html aware, I think it has more than just a eex under the hood. I would just copy the sigil code with those engines to avoid headaches. If you are just interested in a engine that just escapes html, look at older versions of phoenix, the old ones they used were simple.