Search code examples
go-templates

Compare strings in templates


I have the following template:

{{if . eq "login failed"}}
<span class="text-error">Incorrect username or password</span>
{{else if . eq "login success"}}
<span class="text-success">You have successfully logged in!</span>
{{end}}

I am passing a string when I execute the template.

However, I get the following error:

executing "login.html" at <.>: can't give argument to non-function .

How do I compare the strings within the template?


Solution

  • eq is function, not an operator. It is called with the form: eq <x> <y> (not <x> eq <y>).

    You can fix your template by moving the operands from the the sides of eq to after it:

    {{if eq . "login failed"}}
    <span class="text-error">Incorrect username or password</span>
    {{else if eq . "login success"}}
    <span class="text-success">You have successfully logged in!</span>
    {{end}}