hugo/content/templates/files.md
Bjørn Erik Pedersen 2c0d1ccdcd Squashed 'docs/' changes from b0470688..73f355ce
73f355ce Update theme
83ff50c2 Use example.com in examples
71292134 Add alias news > release-notes
2e15f642 Update theme
8eef09d2 Add Pygments configuration
572b9e75 Clean up the code shortcode use
a1b2fd3b Remove the code fence language codes
1473b1d9 Remove redundant text
b92c2042 Update theme
8f439c28 Edit contributing section in README
8bcf8a19 Add contributing section to README
4c44ee1c Fix broken content file
2bdc7710 Clarify .Data.Pages sorting in lists.md
092271c2 Use infinitive mood for main titles
b9b8abef Update theme to reflect change to home page content
b897b71b Change copy to use sentence case
fd675ee5 Enable RSS feed for sections
060a5e27 Correct movie title in taxonomies.md
6a5ca96a Update displayed site name for Hub
22f4b7a4 Add example of starting up the local server
d9612cb3 Update theme
a8c3988a Update theme
4198189d Update theme
12d6b016 Update theme
2b1c4197 Update theme
b6d90a1e Fix News release titles
cfe751db Add some build info to README

git-subtree-dir: docs
git-subtree-split: 73f355ce0dd88d032062ea70067431ab980cdd8d
2017-07-21 11:00:08 +02:00

4.7 KiB

title linktitle description godocref date publishdate lastmod categories menu weight sections_weight draft aliases toc
Local File Templates Local File Templates Hugo's `readerDir` and `readFile` functions make it easy to traverse your project's directory structure and write file contents to your templates. https://golang.org/pkg/os/#FileInfo 2017-02-01 2017-02-01 2017-02-01
templates
docs
parent weight
templates 110
110 110 false
/extras/localfiles/
/templates/local-files/
true

Traverse Local Files

With Hugo's readDir and readFile template functions, you can traverse your website's files on your server.

Use readDir

The readDir function returns an array of os.FileInfo. It takes the file's path as a single string argument. This path can be to any directory of your website (i.e., as found on your server's file system).

Whether the path is absolute or relative does not matter because---at least for readDir---the root of your website (typically ./public/) in effect becomes both:

  1. The file system root
  2. The current working directory

readDir Example: List Directory Files

This shortcode creates a link to each of the files in a directory---display as the file's basename---along with the file's size in bytes.

{{< code file="layouts/shortcodes/directoryindex.html" download="directoryindex.html" >}} {{< readfile file="/themes/gohugoioTheme/layouts/shortcodes/directoryindex.html" >}} {{< /code >}}

You can then call the shortcode as follows inside of your content's markup:

{{</* directoryindex path="/static/css" pathURL="/css" */>}}

The above shortcode is part of the code for the Hugo docs. Here it lists this site's CSS files:

{{< directoryindex path="/themes/gohugoioTheme/static/dist" pathURL="/css" >}}

{{% note "Slashes are Important" %}} The initial slash / in pathURL is important in the directoryindex shortcode. Otherwise, pathURL becomes relative to the current web page. {{% /note %}}

Use readFile

The readfile function reads a file from disk and converts it into a string to be manipulated by other Hugo functions or added as-is. readFile takes the file, including path, as an argument passed to the function.

To use the readFile function in your templates, make sure the path is relative to your Hugo project's root directory:

{{ readFile "/content/templates/local-file-templates" }}

readFile Example: Add a Project File to Content

As readFile is a function, it is only available to you in your templates and not your content. However, we can create a simple shortcode template that calls readFile, passes the first argument through the function, and then allows an optional second argument to send the file through the Blackfriday markdown processor. The pattern for adding this shortcode to your content will be as follows:

{{</* readfile file="/path/to/local/file.txt" markdown="true" */>}}

{{% warning %}} If you are going to create custom shortcodes with readFile for a theme, note that usage of the shortcode will refer to the project root and not your themes directory. {{% /warning %}}

Here is the templating for our new readfile shortcode:

{{< code file="layouts/shortcodes/readfile.html" download="readfile.html" >}} {{< readfile file="/themes/gohugoioTheme/layouts/shortcodes/readfile.html">}} {{< /code >}}

This readfile shortcode is also part of the Hugo docs. So is testing.txt, which we will call in this example by passing it into our new readfile shortcode as follows:

{{</* readfile file="/content/readfiles/testing.txt" */>}}

The output "string" for this shortcode declaration will be the following:

{{< readfile file="/content/readfiles/testing.txt" >}}

However, if we want Hugo to pass this string through Blackfriday, we should add the markdown="true" optional parameter:

{{</* readfile file="/content/readfiles/testing.txt" markdown="true" */>}}

And here is the result as called directly in the Hugo docs and rendered for display:

{{< readfile file="/content/readfiles/testing.txt" markdown="true">}}