Let's Go Processing forms › Setting up an HTML form
Previous · Contents · Next
Chapter 7.1.

Setting up an HTML form

Let’s begin by making a new ui/html/pages/create.tmpl file to hold the HTML for the form:

$ touch ui/html/pages/create.tmpl

… and then add the following markup, using the same template patterns that we used earlier in the book.

File: ui/html/pages/create.tmpl
{{define "title"}}Create a New Snippet{{end}}

{{define "main"}}
<form action='/snippet/create' method='POST'>
    <div>
        <label>Title:</label>
        <input type='text' name='title'>
    </div>
    <div>
        <label>Content:</label>
        <textarea name='content'></textarea>
    </div>
    <div>
        <label>Delete in:</label>
        <input type='radio' name='expires' value='365' checked> One Year
        <input type='radio' name='expires' value='7'> One Week
        <input type='radio' name='expires' value='1'> One Day
    </div>
    <div>
        <input type='submit' value='Publish snippet'>
    </div>
</form>
{{end}}

There’s nothing particularly special about this so far. Our main template contains a standard HTML form which sends three form values: title, content and expires (the number of days until the snippet should expire). The only thing to really point out is the form’s action and method attributes — we’ve set these up so that the form will POST the data to the URL /snippet/create when it’s submitted.

Now let’s add a new ‘Create snippet’ link to the navigation bar for our application, so that clicking it will take the user to this new form.

File: ui/html/partials/nav.tmpl
{{define "nav"}}
 <nav>
    <a href='/'>Home</a>
    <!-- Add a link to the new form -->
    <a href='/snippet/create'>Create snippet</a>
</nav>
{{end}}

And finally, we need to update the snippetCreateForm handler so that it renders our new page like so:

File: cmd/web/handlers.go
package main

...

func (app *application) snippetCreate(w http.ResponseWriter, r *http.Request) {
    data := app.newTemplateData(r)

    app.render(w, r, http.StatusOK, "create.tmpl", data)
}

...

At this point you can fire up the application and visit http://localhost:4000/snippet/create in your browser. You should see a form which looks like this:

07.01-01.png