Skip to content

Commit

Permalink
html/template - separando o html do código go
Browse files Browse the repository at this point in the history
  • Loading branch information
wagnerdevocelot committed Aug 11, 2020
1 parent 3c44c51 commit 9f45b62
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 16 deletions.
11 changes: 11 additions & 0 deletions edit.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!-- Vamos criar um arquivo de modelo contendo o formulário HTML. Abra um novo arquivo denominado
edit.html e adicione as seguintes linhas: -->

<h1>Editando {{.Titulo}}</h1>

<form action="/save/{{.Titulo}}" method="POST">
<div><textarea name="body" rows="20" cols="80">{{printf "%s" .Corpo}}</textarea></div>
<div><input type="submit" value="Salvar"></div>
</form>

<!-- =======================================> volte para wiki.go -->
39 changes: 23 additions & 16 deletions wiki.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ package main

import (
"fmt"

// O html/template package faz parte da biblioteca padrão do Go. Podemos usar html/template
// para manter o HTML em um arquivo separado, o que nos permite alterar o layout
// de nossa página de edição sem modificar o código Go.

// =======================================> Vá para o arquivo edit.html

"html/template"
"io/ioutil"
"log"
"net/http"
Expand Down Expand Up @@ -36,31 +44,30 @@ func viewHandler(escrever http.ResponseWriter, ler *http.Request) {
fmt.Fprintf(escrever, "<h1>%s</h1><div>%s</div>", pagina.Titulo, pagina.Corpo)
}

// A função editHandler carrega a página (se não existir, cria uma Pagina struct vazia )
// e exibe um formulário HTML
// Esta função funcionará bem, mas todo esse HTML hardcoded é feio. Existe uma maneira melhor.
// Modifique editHandler para usar o template, em vez do HTML hardcoded:

// A função template.ParseFiles lerá o conteúdo de edit.html e retornará um ponteiro *template.Template.

// O método template.Execute executa o template, escrevendo o HTML gerado no http.ResponseWriter.
// Os identificadores .Titulo e .Corpo lá no edit.html referem-se a Titulo e Corpo
// presentes aqui na struct Pagina.

// As diretivas de temlate são colocadas entre chaves duplas. A instrução printf "%s" .Corpo
// é uma chamada de função que tem .Corpo como uma string em vez de um fluxo de bytes como saída.
// O html/template package ajuda a garantir que apenas HTML seguro e com aparência correta seja
// gerado por ações de template.

// editHandler carrega um formulário de edição
func editHandler(escrever http.ResponseWriter, ler *http.Request) {
titulo := ler.URL.Path[len("/edit/"):]
pagina, err := carregaPagina(titulo)
if err != nil {
pagina = &Pagina{Titulo: titulo}
}
fmt.Fprintf(escrever, "<h1>Editando %s</h1>"+
"<form action=\"/save/%s\" method=\"POST\">"+
"<textarea name=\"body\">%s</textarea><br>"+
"<input type=\"submit\" value=\"Save\">"+
"</form>",
pagina.Titulo, pagina.Titulo, pagina.Corpo)
template, _ := template.ParseFiles("edit.html")
template.Execute(escrever, pagina)
}

// Um wiki não é um wiki sem a capacidade de editar páginas. Vamos criar dois novos manipuladores: um
// nomeado editHandler para exibir um formulário de 'página de edição' e outro nomeado saveHandler para salvar
// os dados inseridos por meio do formulário.

// OBS. saveHandler está comentado pois essa função ainda não foi feita, o Go irá acusar erro para
// variáveis não utilizadas ou chamadas de funções que não foram implementadas.

func main() {
http.HandleFunc("/view/", viewHandler)
http.HandleFunc("/edit/", editHandler)
Expand Down

0 comments on commit 9f45b62

Please sign in to comment.