В Фениксе @
- это макрос, т.е. это имя функции макроса:
@ - это на самом деле макрос, который переводит @key в Map.get (назначает,: ключ).
(https://hexdocs.pm/phoenix/templates.html)
Я действительно считаю, что в этой цитате есть ошибка, и она должна выглядеть так:
@ - это на самом деле макрос, которыйпереводит @key в Keyword.get (назначает,: ключ).
И assigns
происходит отсюда:
render(conn, template, assigns)
https://hexdocs.pm/phoenix/Phoenix.Controller.html#render/3
AsВ результате, если вы вызываете render следующим образом:
render(conn, "page.html", message: "hello", answer: "yello")
|_______________________________|
^
|
assigns (a keyword list)
, а затем в шаблоне page.html
, если вы напишите @message
, то Phoenix заменит это на Keyword.get(assigns, :message)
, что оценивается в "hello"
.
Это должно продемонстрировать, что написание @get_csrf_token()
в вашем шаблоне - нонсенс. Вместо этого вам нужно сделать что-то вроде этого:
def your_action(conn, _params) do
render(conn, "page.html", csrf: csrf_token(conn) )
end
Затем в своем шаблоне вы можете написать @csrf
чтобы вставить токен.