5.6 KiB
title, linktitle, description, date, publishdate, lastmod, categories, tags, weight, draft, aliases, toc
| title | linktitle | description | date | publishdate | lastmod | categories | tags | weight | draft | aliases | toc | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Content Types | Types | Hugo provides support for sites with multiple content types and assumes your site will be organized into sections, where each section will use the corresponding type. | 2017-02-01 | 2017-02-01 | 2017-02-01 |
|
|
60 | false |
|
true |
Hugo provides full support for sites with multiple content types. A content type can have a unique set of metadata (i.e., front matter) or customized template and can be created by the hugo new command via archetypes.
{{% note "Hugo Content Type != MIME Type" %}}
It's important to distinguish the difference between Hugo's content types and MIME types. In Hugo, a content type is a piece of information (i.e. a content item) that has multiple attributes---typically front matter followed by a content block---and is not necessarily related to a file format or file extension (e.g., .json, .amp.html).
{{% /note %}}
Tumblr is a good example of a website containing multiple content types. A piece of "content" could be a photo, quote, or a post, each with different sets of metadata and different visual rendering.
Assigning a Content Type
Hugo assumes that your site will be organized into sections and each section will use a corresponding type. This is to reduce the amount of configuration necessary for new Hugo projects.
If you are taking advantage of this default behavior, each new piece of content you place into a section will automatically inherit the type. Alternatively, you can set the content type in a content file's front matter in the field "type".
Creating New Content of a Specific Type
You can manually add files to your content directories, but Hugo has the ability to create and populate a new content file with preconfigured front matter via archetypes.
Defining a Content Type
Creating a new content type is easy in Hugo. You simply define and provide the templates and archetype unique to your new content type. Hugo will fall back to using the general templates and default archetype whenever a specific file is not present.
{{% note "Declaring Content Types" %}} Remember, all of the following are optional. If you do not specifically declare content types in your front matter or develop specific layouts for content types, Hugo is smart enough to assume the content type from the file path and content section. (See Content Sections for more information.) {{% /note %}}
The following examples take you stepwise through creating a new type layout for a content file that contains the following front matter:
{{% code file="content/events/my-first-event.md" copy="false" %}}
+++
title: My First Event
date = "2016-06-24T19:20:04-07:00"
description = "Today is my 36th birthday. My how time flies."
type = "event"
layout = "birthday"
+++
{{% /code %}}
By default, Hugo assumes *.md under events is of the events content type. However, we have specified that this particular file at content/events/ my-first-event.md is of type special and should render using the birthday layout.
Create a Type Layout Directory
Create a directory with the name of the type in /layouts. Type is always singular; e.g., events => event and posts => post.
For the above example, you would create a layout directory at layouts/event/birthday.html.
{{% note %}}
If you have multiple content files in your events directory that are of the special type and you don't want to define the layout specifically for each individual, you can create a layout at layouts/special/single.html to observe the single page template lookup order.
{{% /note %}}
{{% warning %}}
With the "everything is a page" data model introduced in v0.18 (see Content Organization), you can use _index.md in content directories to add both content and front matter to section templates. However, type and layout declared in the front matter of _index.md are not currently respected at build time as of v0.19. This is a known issue (#3005).
{{% /warning %}}
Create Views
Many sites support rendering content in a few different ways; e.g., a single page view and a summary view to be used when displaying a list of section contents.
Hugo limits assumptions about how you want to display your content to an intuitive set of sane defaults and will support as many different views of a content type as your site requires. All that is required for these additional views is that a template exists in each /layouts/<TYPE> directory with the same name.
Custom Content Type Template Lookup Order
The lookup order for the content/events/my-first-event.md templates would be as follows:
layouts/event/birthday.htmllayouts/event/single.htmllayouts/events/single.htmllayouts/_default/single.html
Create a Corresponding Archetype
We can then create a custom archetype with preconfigured front matter at event.md in the /archetypes directory; i.e. archetypes/event.md.
Read Archetypes for more information on archetype usage with hugo new.