shithub: hugo

Download patch

ref: 7b1f0960e3b7b31017dce5925e455bd43df86efb
parent: f28a8fa0c2d8a7ec038a9dc8a07ecf5716587178
author: Ross Lawley <[email protected]>
date: Wed Aug 21 13:21:53 EDT 2013

Add 404.html for gh-pages

Signed-off-by: Noah Campbell <[email protected]>

--- /dev/null
+++ b/docs/content/layout/404.html
@@ -1,0 +1,31 @@
+---
+title: "404.html Templates"
+date: "2013-08-21"
+---
+
+When using Hugo with [github pages](http://pages.github.com/) you can provide
+your own 404 template by creating a 404.html file in the root.
+
+404 pages are of the type "node" and have all the [node
+variables](/layout/variables/) available to use in the templates.
+
+In addition to the standard node variables, the homepage has access to
+all site content accessible from .Data.Pages
+
+    ▾ layouts/
+        404.html
+
+## 404.html
+This is a basic example of a 404.html template:
+
+    {{ template "chrome/header.html" . }}
+    {{ template "chrome/subheader.html" . }}
+
+    <section id="main">
+      <div>
+       <h1 id="title">{{ .Title }}</h1>
+      </div>
+    </section>
+
+    {{ template "chrome/footer.html" }}
+
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -598,6 +598,18 @@
 		s.Tmpl.ExecuteTemplate(y, "rss.xml", n)
 		s.WritePublic("index.xml", y.Bytes())
 	}
+
+	if a := s.Tmpl.Lookup("404.html"); a != nil {
+		n.Url = Urlize("404.html")
+		n.Title = "404 Page not found"
+		n.Permalink = template.HTML(string(n.Site.BaseUrl) + "404.html")
+		x, err := s.RenderThing(n, "404.html")
+		if err != nil {
+			return err
+		}
+		s.WritePublic("404.html", x.Bytes())
+	}
+
 	return nil
 }