zimt28

zimt28

Using sigil_E inside of a macro

I’d like to use the ~E sigil inside of a macro. For some reason the assigns variable is not accessible:

defmacro __using__(_opts) do
  quote do
    use AppWeb, :view

    def render("index.html", assigns) do
      ~E"""
      <%= @test %>
      """
    end
  end
end

Result:

expected “assigns” to expand to an existing variable or be part of a match

Writing the render/2 function directly into a view works fine. Is there a way to make this work?

Thanks!

Marked As Solved

josevalim

josevalim

Creator of Elixir

Variables defined inside a macro that their own context, so they don’t conflict with user variables. You can force it to be the user variable by using var!:

    def render("index.html", var!(assigns)) do

Also Liked

kip

kip

ex_cldr Core Team

I think you’ll have to set unquote: false to defer expansion. Therefore:

defmacro __using__(_opts) do
  quote unquote: false do
    use AppWeb, :view

    def render("index.html", assigns) do
      ~E"""
      <%= @test %>
      """
    end
  end
end

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
Lily
In templates/appointment/index.html.eex: &lt;%= for appointment &lt;- @appointments do %&gt; &lt;tr&gt; &lt;td&gt;&lt;%= appoi...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

We're in Beta

About us Mission Statement