Ao trabalhar com layouts complexos em aplicações web, muitas vezes é útil criar um modelo base que sirva como base para outros páginas. No pacote html/template do Go, isso pode ser feito usando as diretivas {{define}} e {{template}}.
Considere o seguinte exemplo onde você tem um arquivo de layout base (base.html):
header... {{template "content" .}} footer...
E páginas separadas (page1.html e page2.html) que reutilizam esse layout base com seu próprio conteúdo personalizado:
{{define "content"}}{{end}} {{template "base.html"}}Page1
{{define "content"}}{{end}} {{template "base.html"}}Page2
O problema que você está enfrentando é que a página 1 e a página 2 estão usando o mesmo HTML para renderização, que é definido em page2.html. Para resolver isso, precisamos ter certeza de que ambas as páginas declaram e usam suas próprias seções de conteúdo exclusivas dentro do bloco {{template}}.
Uma abordagem melhor é definir o conteúdo do modelo em arquivos separados, conforme mostrado abaixo:
base.html:
{{define "base"}} header... {{template "content" .}} footer... {{end}}
page1.html:
{{define "content"}} I'm page 1 {{end}}
page2.html:
{{define "content"}} I'm page 2 {{end}}
Em seu aplicativo, você pode analisar o conteúdo e os arquivos de modelo base em um objeto de modelo usando template.New() e ParseFiles(). Posteriormente, você pode construir o HTML final executando o modelo base com o contexto desejado usando ExecuteTemplate().
tmpl, err := template.New("").ParseFiles("page1.html", "base.html") // check your err err = tmpl.ExecuteTemplate(w, "base", yourContext)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3