g-var.com | G-VAR's Blog

Recent Posts

Full Tag Index

Posts in “Hugo”

Hugo的评论功能 | Hugo 41

Tue, Feb 17, 2015
转载请注明出处! 译文链接:Hugo的评论功能 英文原文:Comments in Hugo 因为Hugo是一个静态站点生成器,所以生成的内容都是静态的,并且不能与用户交互。通常人们最想要的交互就是就是评论功能。 Hugo搭载了通过JavaScript支持Disqus、第三方提供的评论服务以及社区功能。 你的主题可能已经支持了Disqus,但即使没有,也可以很容易增加该功能。 支持Disqus 给模板添加Disqus功能 Hugo具有所有加载Disqus所需要的代码。只需要在你想要评论出现的地方包含下面的代码: {{ template "_internal/disqus.html" . }} 配置Disqus 该模板需要你在你的站点配置文件(如config.yaml)中设置一个单数的值。 disqusShortname = "XYW" 另外,你也可以选择性地在给定内容片段的front matter中设置下面的内容: disqus_identifier disqus_title disqus_url 有条件的加载Disqus评论 用户已经发现了当在本地运行Hugo的web服务器启用Disqus评论功能时,会造成出现与关联的Disqus账户不想管的评论内容。为了防止出现这种情况,需要稍微调整局部模板。因此,不只可以使用上边提到的内置"_internal/disqus.html"模板,也可以在你的分模板文件夹下创建像下面内容的模板: <div id="disqus_thread"></div> <script type="text/javascript"> (function() { // Don't ever inject Disqus on localhost--it creates unwanted // discussions from 'localhost:1313' on your Disqus account... if (window.location.hostname == "localhost") return; var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; var disqus_shortname = '{{ .

Hugo的构建器 | Hugo 40

Mon, Feb 16, 2015
转载请注明出处! 译文链接:Hugo的构建器 英文原文:Hugo Builders Hugo提供了快速创建网站、主题或开始页面的功能。 新的站点 想要快速构建一个站点? $ hugo new site /path/to/site Hugo会创建所有需要的目录和文件来快速上手。 Hugo只会接触到文件并创建相应目录(在适当的位置),配置文件和内容文件是由你决定的。但幸运的是我们同样拥有内容构建器(详见以下内容)。 新的主题 想要设计一个新的主题么? $ hugo new theme THEME_NAME 在你的工作目录中运行以上命令,就会在你的主题目录下创建一个具有所有需要文件的新主题。Hugo会给你提供一个许可文件和一个theme.toml文件,并且其中大多数内容已经为你准备好了。 一旦构建器构建完成,请按照主题创建指南来进行操作。 新的内容 你会使用到该构建器的大部分功能。每一次你想要创建新的内容片段,内容构建器都会为你提供正确的开始。 通过内容原型,内容构建器不只会插入当前的日期和适当的元数据,还会根据内容类型填充上预设值。 $ hugo new relative/path/to/content 此功能假设你在你的工作目录中运行该命令,并且内容的路径起始于你的内容目录。 典型的例子是我打开两个不同的控制台,一个运行hugo server --watch,而另一个使用构建器创建新的内容。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Hugo的别名 | Hugo 39

Mon, Feb 16, 2015
转载请注明出处! 译文链接:Hugo的别名 英文原文:Aliases 为了让人们可以将现有发布的内容迁移到Hugo中,你需要一个很好的机制来处理旧URLs的重定向。 幸运的是,在Hugo中通过aliases功能可以很轻松地处理它们。 例子 content/posts/my-awesome-blog-post.md Toml +++ aliases = [ "/posts/my-original-url/", "/2010/even-earlier-url.html" ] +++ YAML --- aliases: - /posts/my-original-url/ - /2010/even-earlier-url.html --- 现在,当你访问任何的别名位置,它们都会重定向到该页面。 重要的行为 Hugo不做任何有关别名的假设。而且它们也不会根据你的UglyUrls设置进行改变。你只需要提供根目录的绝对路径以及完整的文件名或目录。 别名会比其它内容进行优先显示,并且会被具有相同路径的任何内容覆盖。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Hugo的结构体与方法 | Hugo 38

Sun, Feb 15, 2015
转载请注明出处! 译文链接:Hugo的结构体与方法 英文原文:Structure & Methods Hugo中可以在不同的分类结构体中使用一系列的值和方法。 分类的方法 一个分类就是一个map[string]WeightedPages。 .Get(term) 返回分类键值的加权页面。 .Count(term) 分配给该分类键值的内容片段的数量。 .Alphabetical 返回以分类键值排序的排序分类(切片)。 .ByCount 返回以内容的数量排序的排序分类(切片)。 排序的分类 因为Maps是无序的,所以排序的分类是一个定义了排列顺序的特殊结构。 []struct { Name string WeightedPages WeightedPages } 切片中的每个元素都具有以下内容: .Term 使用的分类键值。 .WeightedPages 具有加权页面的切片。 .Count 分配给该分类键值的内容片段的数量。 .Pages 分配给该分类键值的所有页面。此内容具有所有的列表方法。 加权的页面 加权的页面只是具有一组加权页面的切片。

Hugo的分类排序 | Hugo 37

Sun, Feb 15, 2015
转载请注明出处! 译文链接:Hugo的分类排序 英文原文:Ordering Taxonomies Hugo提供了下面两种能力: 顺序显示分类的键值 顺序显示出现的分类内容 分类排序 分类既可以按键值的字母顺序排序,也可以按照与键值对应内容片段的数量来排序。 以字母顺序排列的例子 <ul> {{ $data := .Data }} {{ range $key, $value := .Data.Taxonomy.Alphabetical }} <li><a href="{{ $data.Plural }}/{{ $value.Name | urlize }}"> {{ $value.Name }} </a> {{ $value.Count }} </li> {{ end }} </ul> 以热门程度排序的例子: <ul> {{ $data := .Data }} {{ range $key, $value := .Data.Taxonomy.ByCount }} <li><a href="{{ $data.Plural }}/{{ $value.Name | urlize }}"> {{ $value.

Hugo的分类模板 | Hugo 36

Sat, Feb 14, 2015
转载请注明出处! 译文链接:Hugo的分类模板 英文原文:Taxonomy Templates Hugo中有两种不同的模板,分类的使用就需要你来提供相应的模板。 这两种模板都在模板部分中进行了详细介绍。 列表模板可以是在单一html页面中展示多个内容片段的任何模板。该模板会被用来生成所有自动创建的分类页面。 分类标签模板是一个这样的模板,它被用来生成给定模板的所有标签。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Hugo中分类的展示 | Hugo 35

Sat, Feb 14, 2015
转载请注明出处! 译文链接:Hugo中分类的展示 英文原文:Displaying Taxonomies 在Hugo中,除了Hugo会通过使用列表模板来自动创建分类页面之外,还有四种常见的方式来展示分类中的数据: 对于给定的一段内容,你可以列出与之相关的分类标签 对于给定的一段内容,你可以列出具有相同分类标签的其它内容 你可以列出说有分类的标签 你可以列出所有分类(具有它们的标签) 1.展示分配给内容的分类标签 在内容模板的里面,你可能会想要展示那些分配了内容片段的分类。 由于我们是利用front matter系统来定义内容的分类,所以分配给每个内容片段的分类会放在一直使用的地方(.Params.plural)。 例子 <ul id="tags"> {{ range .Params.tags }} <li><a href="tags/{{ . | urlize }}">{{ . }}</a> </li> {{ end }} </ul> 2.列举具有相同分类标签的内容 首先你可能会疑惑为什么你会使用它。而如果你为某些内容使用了分类,比如一系列的文章,那么这正是你需要使用的。这同样也是一种既快速而又不太好的方式来显示相关的尼日融。 例子 <ul> {{ range .Site.Taxonomies.series.golang }} <li><a href="{{ .Url }}">{{ .Name }}</a></li> {{ end }} </ul> 3.列举具有给定分类标签的所有内容 这对于将该功能作为“特色内容”展示在侧边栏里是非常有用的。你甚至可以通过将不同的标签分配给内容来得道“特色内容”的不同部分。 例子 <section id="menu"> <ul> {{ range $key, $taxonomy := .Site.Taxonomies.featured }} <li> {{ $key }} </li> <ul> {{ range $taxonomy.

Hugo中使用分类功能 | Hugo 34

Wed, Feb 11, 2015
转载请注明出处! 译文链接:Hugo中使用分类功能 英文原文:Using Taxonomies 定义站点的分类 分类在被整个站点使用之前必须在站点配置文件中进行定义。你需要为每个分类提供复数和单数的标签。 这里是一个TOML和YAML配置文件的例子,在配置文件中指定了三个分类类别(默认是两个,series是附加的)。 注意:在TOML中格式为单数的key="复数的value",而在YAML中格式为单数的key:"复数的value": config.toml文件摘录: [taxonomies] tag = "tags" category = "categories" series = "series" config.yaml文件摘录: taxonomies: tag: "tags" category: "categories" series: "series" 将分类的值分配给内容 一旦在站点级别定义了分类,那么就可以将任何的内容片段分配给该分类,而不需要关心内容的类型和部分。 在front matter中就可以完成将内容分配给分类标签。只要简单地创建一个具有复数名称的分类标签的变量,并将所有你想要分配的标签键值分配给该内容。 分类标签的值是区分大小写的 Front Matter例子(TOML格式) +++ title = "Hugo: A fast and flexible static site generator" tags = [ "Development", "Go", "fast", "Blogging" ] categories = [ "Development" ] series = [ "Go Web Dev" ] slug = "hugo" project_url = "https://github.

Hugo分类概述 | Hugo 33

Tue, Feb 10, 2015
转载请注明出处! 译文链接:Hugo分类概述 英文原文:Taxonomy Overview Hugo包含了支持用户对内容进行自定义分组的功能,称之为分组。分组给我们提供了一种对内容进行分类的方式,这样我们就可以以不同的逻辑方式来展现内容之间的关系。 Hugo的默认分类标签为tags和categories。这些分类标签在许多网站系统(如,WordPress,Drupal,Jekyll)中都比较常见。然而Hugo又与这些网站系统有所不同,只要你需要,它允许你精细的自定义网站中所需要的分类标签。使用分类的另一个好处就是可以将一组文章分组成一个系列。通常会用到的标签包括categories,tags,groups,series以及其它。 如果用到了分类标签(并且模板中也提供了分类标签),那么Hugo就会自动创建一些页面,这些页面列举了所有分类标签、键值以及关联到这些键值的所有内容。 定义 Taxonomy:用于分组内容的分类。 Term:分类内部的键值。 Value:分配给该键值的一段内容。 例子 比如,如果我正在写个电影,我可能会用到下面这些分类标签: Actors Directors Studios Genre Year Awards 接下来我会在每个电影的front-matter中为上面所有分类标签指定特定的键值。Hugo就会自动为Actor,Drector,Studio,Genre,Year以及Award创建相关的页面,这些页面中列举了所有与指定的Actor,Director等标签相关的全部电影。 分类的组织结构 接下来让我们用一个实际的例子来展示不同的标签。从分类的角度来看,这可以被抽象为: Actor <- Taxonomy Bruce Willis <- Term The Six Sense <- Content Unbreakable <- Content Moonrise Kingdom <- Content Samuel L. Jackson <- Term Unbreakable <- Content The Avengers <- Content xXx <- Content 而从内容的角度来看,这就会表现的不同了,即使使用的数据和标签是相同的: Unbreakable <- Content Actors <- Taxonomy Bruce Willis <- Term Samuel L.

Hugo自定义404错误页面 | Hugo 32

Sun, Feb 8, 2015
转载请注明出处! 译文链接:Hugo自定义404错误页面 英文原文:404.html Templates 当使用Hugo与GitHub Pages时,你可以通过在根目录创建一个404.html文件来提供一个自定义的404错误页面的模板。 404页面具有”节点”类型,并且在所有的模板中都可以使用节点变量。 除了标准的节点变量,404页面也可以通过.Data.Pages变量来访问所有站点内容。 ▾ layouts/ 404.html 404.html 下面是404.html模板的基本例子: {{ partial "header.html" . }} {{ partial "subheader.html" . }} <section id="main"> <div> <h1 id="title">{{ .Title }}</h1> </div> </section> {{ partial "footer.html" . }} [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Hugo的站点地图模板 | Hugo 31

Sun, Feb 8, 2015
转载请注明出处! 译文链接:Hugo的站点地图模板 英文原文:Sitemap Template Hugo使用单一站点地图模板来生成sitemap.xml文件。Hugo自动带有此模板文件。用户不需要做任何工作,除非他们想要自定义sitemap.xml文件。 该页面具有”节点”类型,并且在所有的模板以及特定的站点地图中都可以使用节点变量: .Sitemap.ChangeFreq页面改变频率 .Sitemap.Priority页面的优先级 除了标准的节点变量,主页可以通过.Data.Pages变量来访问所有站点页面。 如果提供了sitemap.xml文件,那么Hugo就会使用/layouts/sitemap.xml来代替内部的sitemap.xml文件。 Hugo的sitemap.xml 该模板遵守0.9版本的站点地图协议。 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> {{ range .Data.Pages }} <url> <loc>{{ .Permalink }}</loc> <lastmod>{{ safeHtml ( .Date.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ with .Sitemap.ChangeFreq }} <changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }} <priority>{{ .Sitemap.Priority }}</priority>{{ end }} </url> {{ end }} </urlset> 重要提示:Hugo会自动添加下面的头文件内容到展示的文件中。请不要在模板中包含它,因为它不是有效的HTML。 <?xml version="1.0" encoding="utf-8" standalone="yes" ?> [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Hugo的RSS模板 | Hugo 30

Sun, Feb 8, 2015
转载请注明出处! 译文链接:Hugo的RSS模板 英文原文:RSS (feed) Templates 就像所有其它的模板一样,你可以使用单一的RSS模板来生成所有的RSS源,也可以为每一个独立的源分别创建一个特定的模板。而与其它模板不同的地方是,Hugo附带了自己的RSS 2.0模板。在大多数情况下这就足够了,并且也不需要用户自己提供RSS模板。 RSS页面具有”节点”类型,并且在所有的模板中都可以使用节点变量。 哪个模板将被展示? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 Hugo会使用下面的优先级列表来进行选择。如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 主RSS /layouts/rss.xml /layouts/_default/rss.xml __internal/rss.xml 部分RSS /layouts/section/SECTION.rss.xml /layouts/_default/rss.xml /themes/THEME/layouts/section/SECTION.rss.xml /themes/THEME/layouts/_default/rss.xml __internal/rss.xml 分类RSS /layouts/taxonomy/SINGULAR.rss.xml /layouts/_default/rss.xml /themes/THEME/layouts/taxonomy/SINGULAR.rss.xml /themes/THEME/layouts/_default/rss.xml __internal/rss.xml 配置RSS 如果在站点配置文件中提供了下面的内容,那么这些内容就会被包含在RSS输出结果中。下面提供了实例的值。 languageCode = "en-us" copyright = "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License." [author] name = "My Name Here" 嵌入的rss.xml 下面的是Hugo附带的RSS模板。它遵守RSS 2.0规范。 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>{{ .Title }} on {{ .

Hugo分模板 | Hugo 29

Mon, Feb 2, 2015
转载请注明出处! 译文链接:Hugo分模板 英文原文:Partial Templates 实际上,Hugo中可以很方便的将普通模板的部分内容分成分模板,而且分模板可以被包含在任何地方。当你创建模板其余内容的时候,你可以从/layout/partials目录下包含相应的模板。 分模板对于主题特别重要,因为它使得用户可以只覆盖主题的一小部分,同时又可以保持未来的兼容性。 主题开发者也许会想在主题中通过空的HTML文件来包含一些分模板,这样最终用户就可以很容易在相应内容插入自定义的内容。 我发现在分模板中包含页首模板和页脚模板是很有用的,这样我就可以在所有的整页布局中包含它们了。与在其它模板中被包含所使用的好名字相比,其实header.html和footer.html并没有什么特别的。 ▾ layouts/ ▾ partials/ header.html footer.html 通过确保只在节点和页面中引用变量,我们也可以在它们中使用相同的分模板。 分模板与模板 Hugo的v0.12版本中介绍了在模板系统中调用partial模板。在模板系统中这是对分模板被处理之前方式的一种改变。在之前的版本中,Hugo并没有特别对待分模板,并且你可以在标准的模板语言中通过调用template函数来包含一个分模板。 由于在v0.11版本中增加了主题系统,使得可以很明显的使用主题与覆盖需要的分模板。 而当使用Hugo的v0.12及更高的版本时,请通过调用partial函数来使用(并且需要离开”partial/“的路径)。老方法依然有效,但不会从用户使用本地布局来覆盖分主题文件的功能中获得任何好处。 header.html例子 页首模板也使用在spf13.com中。 <!DOCTYPE html> <html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <head> <meta charset="utf-8"> {{ partial "meta.html" . }} <base href="{{ .Site.BaseUrl }}"> <title> {{ .Title }} : spf13.com </title> <link rel="canonical" href="{{ .Permalink }}"> {{ if .RSSLink }}<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Title }}" />{{ end }} {{ partial "head_includes.

Hugo内容视图 | Hugo 28

Sun, Feb 1, 2015
转载请注明出处! 译文链接:Hugo内容视图 英文原文:Content Views 除了单一内容模板,Hugo还可以使你的内容呈现出不同的视图。这些在列表模板中特别有用。 比如你可能会想要在首页上显示所有类型的内容,但首页却只有一个摘要视图。也许在分类列表页面中你只想要内容的项目符号列表。视图通过将所有内容的不同类型委托给内容本身就可以非常简单的实现了。 创建内容视图 要创建新的视图,只要简单地在每个不同的内容类型目录中创建一个具有视图名称的模板就可以了。在下面的例子中,我们已经为”post”和”project”这两种内容类型分别创建了一个”li”视图和一个”summary”视图。正如你所看到的,它们就在单一内容视图模板”single.html”的旁边。甚至你也可以为给定的类型提供一个特定的视图,并且也可以继续使用_default/single.html作为主视图。 ▾ layouts/ ▾ post/ li.html single.html summary.html ▾ project/ li.html single.html summary.html 在某种类型没有提供特定的模板时,Hugo也同样支持使用默认的内容模板。虽然默认类型与其它类型的工作方式相同,但是默认类型的目录必须得叫”_default”。在”_default”目录中也可以定义内容视图。 ▾ layouts/ ▾ _default/ li.html single.html summary.html 哪个模板将被展示? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 Hugo会使用下面的优先级列表来进行选择。如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 /layouts/TYPE/VIEW.html /layouts/_default/VIEW.html /themes/THEME/layouts/TYPE/VIEW.html /themes/THEME/layouts/_default/view.html 使用视图的例子 在列表内部展示视图 在(列表模板)的内部使用摘要视图(如下面所定义的)。 <section id="main"> <div> <h1 id="title">{{ .Title }}</h1> {{ range .Data.Pages }} {{ .Render "summary"}} {{ end }} </div> </section> 在上面的例子中,你会发现我们已经调用了.Render函数,并且向它传递了展示内容的视图。.Render是一个比较特殊的函数,在内容的内部是可见的,它会让内容使用给定的视图模板来展示它自己。在这个例子中,我们并没有使用”li”视图。要使用该视图我们可以将展示内容改为{{.Render "li"}}。 li.html Hugo会向视图模板传递整个页面对象。请参考页面变量来获得所有列表。 该内容模板也用在了spf13.com中。 <li> <a href="{{ .

Hugo分类模板 | Hugo 27

Sat, Jan 31, 2015
转载请注明出处! 译文链接:Hugo分类模板 英文原文:Taxonomy Terms Template 对于给定的分类条件,需要一个特殊的模板来创建分类的列表。这与列表模板不同,因为列表模板是内容的列表,而该模板是元数据的列表。 哪个模板将被展示? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 分类条件列表会基于下面的优先级列表来展示在/PLURAL/(比如:http://spf13.com/topics/)中: /layouts/taxonomy/SINGULAR.terms.html (e.g. /layouts/taxonomy/topic.terms.html) /layouts/_default/terms.html 如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 如果在/layouts或/theme/layouts目录下都没有找到相应的文件,那么Hugo就不会展示分类页面。将分类列表展示在其他诸如主页或侧边栏(如标签云)的页面中也是比较常见的,并没有特定的页面来展示这些分类标签。 变量 分类标签页面具有”节点”类型,并且所有的节点变量和站点变量都可以在模板中使用。 分类标签页面还额外的包含以下内容: .Data.Singular 分类标签的单数名称 .Data.Plural 分类标签的复数名称 .Data.Terms 分类标签本身 .Data.Terms.Alphabetical 按字母顺序排列的分类标签 .Data.Terms.ByCount 以受欢迎程度来排列的分类标签 terms.html文件例子 列表页面具有”节点”类型,并且所有的节点变量和站点变量都可以在模板中使用。 该内容模板被用在了spf13.com中。它使用了[partial templates](http://gohugo.io/templates/partials/)。分类列表模板不能使用内容视图,因为它们不展示内容,而是展示关于内容的信息。 这个特殊的模板列出了所有使用在spf13.com中的标签,并且每个标签都提供了一个被标记的内容片段的计数。 .Data.Terms is an map of terms ⇒ [contents] {{ partial "header.html" . }} {{ partial "subheader.html" . }} <section id="main"> <div> <h1 id="title">{{ .Title }}</h1> <ul> {{ $data := .Data }} {{ range $key, $value := .

Hugo首页模板 | Hugo 26

Sat, Jan 31, 2015
转载请注明出处! 译文链接:Hugo首页模板 英文原文:Homepage 网站的首页通常会被组织成与其它页面不同的形式。在Hugo中你可以定义属于你自己的首页模板。 首页具有”节点”类型,并且所有的节点变量和站点变量都可以在模板中使用。 构建网站时该模板是唯一一个必须的模板,并且在构建新的站点和模板时它很有用。同时,在使用单一页面站点时它也是唯一需要的模板。 另外除了标准的节点变量,首页也可以通过.Data.Pages访问所有站点内容。使用页面列表的详细信息请参考列表模板。 哪个模板将被展示? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 Hugo将使用以下具有优先级的列表。如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 /layouts/index.html /layouts/_default/list.html /layouts/_default/single.html /themes/THEME/layouts/index.html /themes/THEME/layouts/_default/list.html /themes/THEME/layouts/_default/single.html index.html例子 该内容模板被用在了spf13.com中。它使用了[partial templates](http://gohugo.io/templates/partials/),并且采用了类似于列表的方法。 <!DOCTYPE html> <html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> <head> <meta charset="utf-8"> {{ partial "meta.html" . }} <base href="{{ .Site.BaseUrl }}"> <title>{{ .Site.Title }}</title> <link rel="canonical" href="{{ .Permalink }}"> <link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" /> {{ partial "head_includes.html" . }} </head> <body lang="en"> {{ partial "subheader.

Hugo内容列表模板 | Hugo 25

Fri, Jan 30, 2015
转载请注明出处! 译文链接:Hugo内容列表模板 英文原文:Content List Template 列表模板可以是在单一HTML页面展示多块内容的任何模板(主页具有特定模板除外)。 我们正在使用的术语列表实际上是文章材料的按序排列,特别是以字母或文字的顺序。Hugo使用列表模板来展示罗列了内容的部分,比如taxonomies和sections。 哪个模板将被展示? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 Hugo将使用以下具有优先级的列表。如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 Section列表 Section会被展示在/SECTION/中(比如:http://spf13.com/project/)。 /layouts/section/SECTION.html /layouts/_default/section.html /layouts/_default/list.html /themes/THEME/layouts/section/SECTION.html /themes/THEME/_default/section.html /themes/THEME/layouts/_default/list.html Taxonomy列表 Taxonomy会被展示在/PLURAL/TERM/中(比如:http://spf13.com/topics/golang/): /layouts/taxonomy/SINGULAR.html (e.g. /layouts/taxonomy/topic.html) /layouts/_default/taxonomy.html /layouts/_default/list.html /themes/THEME/layouts/taxonomy/SINGULAR.html /themes/THEME/_default/taxonomy.html /themes/THEME/layouts/_default/list.html Section RSS Section RSS会被展示在/SECTION/index.xml中(比如:http://spf13.com/project/index.xml)。 Hugo搭载了属于它自己的RSS 2.0模板。在大多数情况下该模板就已经足够了,并且RSS模板也不需要用户提供。 Hugo允许你定义任何你想要的RSS类型,并且也可以为每个section和taxonomy提供不同的RSS文件。 /layouts/section/SECTION.rss.xml /layouts/_default/rss.xml /themes/THEME/layouts/section/SECTION.rss.xml /themes/THEME/layouts/_default/rss.xml Taxonomy RSS Taxonomy RSS会被展示在/PLURAL/TERM/index.xml中(比如:http://spf13.com/topics/golang/index.xml)。 Hugo搭载了属于它自己的RSS 2.0模板。在大多数情况下该模板就已经足够了,并且RSS模板也不需要用户提供。 Hugo允许你定义任何你想要的RSS类型,并且也可以为每个section和taxonomy提供不同的RSS文件。 /layouts/taxonomy/SINGULAR.rss.xml /layouts/_default/rss.xml /themes/THEME/layouts/taxonomy/SINGULAR.rss.xml /themes/THEME/layouts/_default/rss.xml 变量 列表页面具有”节点”类型,并且所有的节点变量和站点变量都可以在模板中使用。 Taxonomy页面会额外包含下面的内容: .Data.singular 分类本身。 列表模板页面例子 section模板例子(post.html) 该内容模板被用在了spf13.com中。它使用了[partial templates](http://gohugo.io/templates/partials/)。所有的例子都使用了一个称为”li”或”summary”的视图,并且定义在该例子站点中。 {{ partial "header.

Hugo单一内容 | Hugo 24

Tue, Jan 27, 2015
转载请注明出处! 译文链接:Hugo单一内容 英文原文:Single Content Template 在Hugo中内容的主要视图就是单一视图。Hugo对于每一个提供的Markdown文件都会用一个单一的模板来渲染它。 哪个模板将会被渲染? Hugo使用了一系列的规则来决定使用哪个模板渲染特定的页面。 Hugo将使用以下具有优先级的列表。如果某个文件不存在,那么将会使用列表中的下一个文件。这就使得你在想要创建特定的布局时不需要创建更多的模板。对于大多数网站,只有位于列表末尾的_default文件是必要的。 用户可以在front-matter中指定type和layout。Section是基于内容文件的位置来确定的。如果提供了type参数,该参数就会被用来代替section。 单一模板 /layouts/TYPE-or-SECTION/LAYOUT.html /layouts/TYPE-or-SECTION/single.html /layouts/_default/single.html /themes/THEME/layouts/TYPE-or-SECTION/LAYOUT.html /themes/THEME/layouts/TYPE-or-SECTION/single.html /themes/THEME/layouts/_default/single.html 单一模板文件例子 内容页面就是具有”page”类型的页面,并且在模板中可以使用所有的页面变量和站点变量。 在下面的例子中,我们已经创建了两种不同的内容类型以及一个默认的内容类型。 在该类型还没有提供特定模板的事件中,将会使用默认的内容模板。默认类型与其它类型一样,但是默认类型的目录必须得叫”_default”。 ▾ layouts/ ▾ _default/ single.html ▾ post/ single.html ▾ project/ single.html post/single.html spf13.com就用到了该内容模板。它用到了局部模板。 {{ partial "header.html" . }} {{ partial "subheader.html" . }} {{ $baseurl := .Site.BaseUrl }} <section id="main"> <h1 id="title">{{ .Title }}</h1> <div> <article id="content"> {{ .Content }} </article> </div> </section> <aside id="meta"> <div> <section> <h4 id="date"> {{ .

Hugo模板变量 | Hugo 23

Wed, Jan 21, 2015
转载请注明出处! 译文链接:Hugo模板变量 英文原文:Template Variables Hugo使得模板可以使用一组变量。由于Go模板是基于上下文的,所以下面这些变量在模板的上下文中是可见的。 页面变量 下面是一个可访问的变量的列表,这些变量可以被定义并用于内容片段中。大多数这些是在front matter,content中定义的,或者可以从文件的位置得到。 .Title – 内容的标题。 .Content – 在front matter下面定义的内容。 .Summary – 生成的内容摘要,用于展示在内容视图的片段。注意,可以在内容页面的正确位置手动插入<!–more–>来设置断点。详细信息请参考Summaries。 .Truncated – 布尔值,摘要被截断时为true。在必要时对于显示Read more...链接很有用。详细信息请参考Summaries。 .Description – 内容的描述。 .Keywords – 内容的元关键字。 .Date – 与内容相关联的日期。 .PublishDate – 内容的发布日期。 .Type – 内容的类型。(比如post) .Section – 内容所属于的section。 .Permalink – 页面的永久连接。 .RelPermalink – 页面的相对永久连接。 .LinkTitle – 为内容创建链接时的访问链接。如果在front matter中设置了linktitle,那么就用该值作为标题,否则就使用title作为标题。 .Taxonomies – 此变量会使用索引的复数形式的字段名。(参考之前的tags和categories) .RSSLink – 索引RSS的链接。 .TableOfContens – 用于此内容所呈现的内容表。 .Prev – 指向前一个内容的链接。(基于发布日期) .Next – 指向后一个内容的链接。(基于发布日期) .PrevInSection – 在同一个section中指向前一个内容的链接。(基于发布日期) .NextInSection – 在同一个section中指向后一个内容的链接。(基于发布日期)

Hugo模板函数 | Hugo 22

Mon, Jan 19, 2015
转载请注明出处! 译文链接:Hugo模板函数 英文原文:Hugo Template Functions Hugo使用出色的Go模板库来作为自己的模板引擎。它是一个非常轻量级的引擎,只提供了非常少的逻辑。根据我们的经验,这些逻辑正好够创造一个良好的静态网站。 Go模板是很轻量级的,但它们也是可以扩展的。Hugo已经将下面这些函数加入到了基本的模板逻辑当中。 (Go本身就提供了内置函数,包括比较运算符和其他一些基本的工具;这些都列举在Go模板文档中了。) 通用函数 isset 如果设置了某参数就返回true。输入可以是slice,array,channel与index,map与key。 比如: {{ if isset .Params "project_url" }} {{ index .Params "project_url" }}{{ end }} echoParam 如果设置了某参数,就把该参数返回。 比如: {{echoParam .Params "project_url" }} eq 如果两个参数相等就返回true。 比如: {{ if eq .Section "blog" }}current{{ end }} first 将array截取成只有前x各元素。 该函数可以作用域lists,taxonomies,terms,groups。 比如: {{ range first 10 .Data.Pages }} {{ .Render "summary" }} {{ end }} where 将array过滤成只包含与给定字段相匹配的元素。 该函数可以作用域lists,taxonomies,terms,groups。 比如: {{ range where .

Go模板入门 | Hugo 21

Sun, Jan 18, 2015
转载请注明出处! 译文链接:Go模板入门 英文原文:Go Template Primer Hugo使用出色的Go模板库来作为自己的模板引擎。它是一个非常轻量级的引擎,只提供了非常少的逻辑。根据我们的经验,这些逻辑正好够创造一个良好的静态网站。如果你使用过其它不同语言或框架的模板系统,那么你会在Go模板中发现很多相似之处。 此篇文章是对使用Go模板的一个简单入门。Go的文档中介绍了更多,并且涉及了这里没有提到的特性。 Go模板介绍 Go模板提供了一种非常简单的模板语言。它依附在属于模板或视图层的最基本的逻辑上。这种简单性的一个后果就是Go模板可以很快的解析。 Go模板的一个独特的特点就是它们可以很好的了解内容。而变量和内容的合理布局是取决于使用它们的上下文的。更多细节可以参考Go文档。 基本语法 Go语言模板其实就是具有一些变量和函数的HTML文件。 Go的变量和函数是包含在{{}}中 以如下方式来访问预定义的变量”foo”: {{ foo }} 使用空格来分隔参数 以如下方式来调用具有输入1,2的add函数: {{ add 1 2 }} 通过.符号来访问方法和字段 以如下方式来访问Page的参数”bar”: {{ .Params.bar }} 可以使用括号来进行分组 {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }} 变量 每个Go模板都可以通过一个结构体(对象)来访问它。在Hugo中,每个模板是作为页面还是作为节点结构进行传递这是取决于你正在展现的页面类型的。更多细节请参考变量页面。 通过引用变量名称来访问该变量。 <title>{{ .Title }}</title> 变量也同样可以被定义和引用。 {{ $address := "123 Main St."}} {{ $address }} 函数 Go模板搭载了许多具有基本功能的函数。Go模板系统也为应用程序提供了一种机制,大家可以对现有的函数进行扩展。Hugo模板函数就提供了一些额外的函数,我们相信这些函数对构建网站是很有用的。函数是通过使用它们的名称并在之后加上以空格隔开参数来调用的。模板函数的增加需要对Hugo进行重新编译。 例子1:数字加法

Hugo模板 | Hugo 20

Sun, Jan 18, 2015
转载请注明出处! 译文链接:Hugo模板 英文原文:Hugo Templates Hugo使用出色的Go模板库来作为自己的模板引擎。它是一个非常轻量级的引擎,只提供了非常少的逻辑。根据我们的经验,这些逻辑正好够创造一个良好的静态网站。 而Hugo具有许多不同的模板角色,其实只使用少量的模板文件就可以构建一个最完整的网站了。请不要畏惧这许多不同的模板角色。它们可以让Hugo构建一个非常复杂的网站。大多数网站只需要创建 /layouts/_default/single.html和/layouts/_default/list.html就可以了。 如果你还不太了解Go的模板,Go Template Primer会是一个非常好的入门的地方。 如果你很熟悉Go的模板,那么Hugo提供了一些你会想要熟悉的额外的模板函数和变量。 主要的模板角色 Hugo具有3种主要的模板。 Single模板 渲染单一的内容。 List模板 列举多个内容的页面。 Homepage模板 网站的主页。 支持的模板角色(可选的) Hugo同样提供了一些额外可选的模板。 Partial模板 以上提到的模板会包含的通用页面组件。 内容视图 渲染(单一)内容类型的不同方式。 分类机制 一个用于特定分类的机制列表,如标签云。 其它模板(通常不是必需的) RSS 用来渲染所有的rss文件。 网站地图 用来渲染XML网站地图。 404 此模板会创建一个404.html页面,当网站放在Github Pages上时会用到该页面。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

创建主题 | Hugo 19

Sat, Jan 17, 2015
转载请注明出处! 译文链接:创建主题 英文原文:Creating a Theme Hugo具有在主题目录下创建新的主题的能力,只要执行hugo new命令就可以了。 hugo new theme [name] 该命令会对一个基本的主题所需要的所有文件和目录进行初始化。Hugo主题是用Go模板语言进行编写的。如果你还不太了解Go,Go template primer页面会帮助你对它有个初步的了解。 主题组件 主题会包含模板文件以及像javascript和css文件一样的静态资源。主题同样可以可选择性的提供原型文件,它是被hugo new命令使用的原型内容类型。 布局 Hugo是围绕着使事情尽可能简单的理念构建的。基本上网站内容都会呈现为两种不同的形式,单一的内容页面和内容列表页面。Hugo中主题布局是以默认状态开始的。而定义的其他布局是用于内容类型,或者应用在section上的。这使得布局变得简单,而又保持了很大的灵活性。 单一内容页面 默认的单一内容文件布局是放在layouts/_default/single.html路径下。 内容列表页面 默认的列表文件布局是放在layouts/_default/list.html路径下。 部分模板 主题创建者应该在整个主题文件里宽松的使用partial templates。包含共享代码不仅是一个很好的DRY做法,同样部分也是一种特殊的模板类型,它可以使最终用户可以只需要覆盖文件的很少一部分,或者从本地/layouts目录下加入很少的代码到主题中。这些部分模板可以很容易的加入到主题当中,并且在确保将来的兼容性上只需要很少的维护工作。 静态文件 静态文件目录下的所有文件最终展示事都会被直接拷贝到网站中。这里没有提供相应的目录结构以做到完全的自由。通常会将静态文件组织成下面的结构形式: /css /js /img 实际的目录机构是什么样子是完全取决于你这个主题创建者喜欢如何组织自己的文件了。 原型文件 如果你的主题在front matter中使用了特定的keys,那么对你具有的每个内容类型提供一个原型文件是个不错的注意。运行文件遵循guidelines provided页面中的规则。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

自定义主题 | Hugo 18

Sat, Jan 17, 2015
转载请注明出处! 译文链接:自定义主题 英文原文:Customizing a Theme Hugo主题允许你从你的工作目录下进行补充或者覆盖任何模板或文件。 替换静态文件 对于包含一个与主题自带的文件不同的文件。比如,如果你想使用更新版本的jQuery,而不想使用主题自带的版本,那么只要将相同名称的文件放在你工作目录下相同的相对路径就可以了。例如,如果主题含有jQuery 1.6并在/themes/themename/static/js/jquery.min.js路径下,你只需要将你的文件放在相同的相对路径/static/js/jquery.min.js下。 替换single模板文件 在任何时候Hugo都会去寻找匹配的模板,在检查主题目录之前会首先检查工作目录。如果你想修改模板,只要在你本地的layouts目录下创建模板就可以了。在template documentation中,每个不同的模板类型都表明了相应的规则,该规则是用来决定使用哪个模板的。 这点在模板创建者使用partial templates时会特别有用。这些分模板可以很容易的插入主题当中,并且对于确保未来的兼容性上只需要很小的维护。 注意:这只对Hugo理解的了的模板有用。如果主题从有创造性命名目录下引入模板文件,那么Hugo就不会首先去检查本地的/layouts目录了。 替换archetype 如果主题附带的原型是用于给定的内容类型(或所有内容类型),却与你如何使用主题不符,那么如果你认为合适,你可以随时将它复制到你的/archetypes目录下进行修改。 理解默认状态 默认状态在Hugo中具有非常强大的力量。特别是它可以覆盖掉主题文件。如果在本地原型目录或/layouts/_default/目录下具有默认文件,那么它就会被用来替换任何在主题当中的相似文件。 最好是覆盖掉特定的文件,而不是使用工作目录下的默认文件。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

使用主题 | Hugo 17

Sat, Jan 17, 2015
转载请注明出处! 译文链接:使用主题 英文原文:Using a Theme 请确认你已经在/themes目录下安装了你想使用的主题。 要将主题应用在网站上,执行以下命令: hugo -t ThemeName ThemeName必须与/themes目录下的名字相符。 Hugo将会首先应用该主题,然后应用本地目录下的所有内容。要获取更多信息,请浏览customizing themes。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

安装主题 | Hugo 16

Sat, Jan 17, 2015
转载请注明出处! 译文链接:安装主题 英文原文:Installing Themes Hugo主题都位于一个集中在GitHub的资源库里。Hugo Themes Repo本身就真的是一个元资源库,它包含了很多贡献者贡献的主题。 安装所有主题 如果你想安装所有可用的Hugo主题,只要从你的工作目录下克隆整个资源库就可以了: $ git clone --recursive https://github.com/spf13/hugoThemes.git themes 安装特定的主题 $ mkdir themes $ cd themes $ git clone URL_TO_THEME [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

主题介绍 | Hugo 15

Sat, Jan 17, 2015
转载请注明出处! 译文链接:主题介绍 英文原文:Themes Overview Hugo提供了一个稳健的主题系统,它虽然简单却可以制作出最复杂的网站。 Hugo社区已经创建了一系列的主题,这些都可以用在你自己的网站中。 Hugo的主题已经被设计为在简单性与功能性之间取得完美的平衡。 Hugo的主题由出色的Go模板库做支撑,如果你还不了解Go模板,请参考primer on Go templates。 Hugo的主题支持所有你期望的现代特性。它们以这样的方式来组织结构以消除代码重复。主题也被设计为易于自定义,同时当上游主题改变时也可以保持升级。 Hugo现在并没有搭载默认主题,它让用户来选择适于自己项目的主题。 我们希望你可以找到适于你网站的Hugo主题。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

内容文件示例 | Hugo 14

Sat, Jan 17, 2015
转载请注明出处! 译文链接:内容文件示例 英文原文:Example Content File 有些东西显示出来比解释更有用。下面是一个以Markdown编写的内容文件的基本例子: mysite/content/project/nitro.md → http://mysite.com/project/nitro.html 加上TOML front matter: +++ date = "2013-06-21T11:27:27-04:00" title = "Nitro: A quick and simple profiler for Go" description = "Nitro is a simple profiler for your Golang applications" tags = [ "Development", "Go", "profiling" ] topics = [ "Development", "Go" ] slug = "nitro" project_url = "https://github.com/spf13/nitro" +++ # Nitro Quick and easy performance analyzer library for [Go](http://golang.org/). ## Overview Nitro is a quick and easy performance analyzer library for Go.

摘要 | Hugo 13

Sat, Jan 17, 2015
转载请注明出处! 译文链接:摘要 英文原文:Summaries Hugo可以生成内容的摘要,这样可以很轻松的在摘要视图中显示片段。摘要视图片段是由Hugo自动生成的。其中,一条内容被分割成内容摘要是取决于该分割是由Hugo定义的还是用户定义的。 内容摘要提供了指向原始内容的链接,通常以Read More链接的形式。 Hugo定义的:自动内容分割 默认情况,Hugo会自动分割70字之后的内容,而分割之前的内容将被用来作为内容摘要。这种情况下你不需要关注内容摘要,除非你想要自定义它;摘要是自动生成的,并且可以被Hugo使用,不需要你做任何额外的工作。 当使用自动摘要,Hugo会从摘要中去除所有的HTML标签。 用户定义的:手动摘要分割 Hugo也提供了一种简单的方式去自定义哪些内容片段将会被分割,只要通过摘要内容分隔符:<!–more–>就可以了。摘要内容分隔符是其他系统中的more tag",summary divider,excerpt separator等的Hugo版本。为了使摘要内容分隔符是有效的,必须准确输入<!–more–>,所有字母都是小写,并且在<!--和-->标签之间没有多余的空白或者其他字符。 如果在内容的片段里存在摘要内容分隔符,那么Hugo就会在该位置进行分割,而不是在70个字的位置。内容分隔符之前的内容会被用来作为内容的摘要,并且摘要内容分隔符会被Read More链接替代。当所有内容被显示时,摘要内容分隔符<!–more–>就会被从输出中移除。 当使用用户定义的摘要时,如使用<!–more–>,Hugo就会在摘要中保留HTML。 摘要内容分隔符只适用于出现的内容。 显示摘要 你可以通过以下代码来显示内容摘要。比如,你可以在一个列表的地方输入下面代码。 {{ range first 10 .Data.Pages }} <div class="summary"> <h4><a href="{{ .Permalink }}">{{ .Title }}</a></h4> {{ .Summary }} </div> {{ end }} [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

内容排序 | Hugo 12

Sat, Jan 17, 2015
转载请注明出处! 译文链接:内容排序 英文原文:Ordering Content Hugo为你提供了组织你的内容按序排列所需要的所有灵活性。 内容默认是以weight的大小来排序的,然后是以最近的日期来排序,但也存在其他的排序方式(通过title和linktitle)。内容的顺序会显示在指定的列表模板中。data和weight字段都是可选的。 没有指定weight的页面会出现在列表的最后。如果没有提供weight字段(或者weight相同),那么date就会被用来排序。如果两个都没有提供,那么内容将会以它从硬盘如何读取的来排序,但是这不能保证排序的形式。 为内容指定weihgt +++ weight = 4 title = "Three" date = "2012-04-06" +++ Front Matter with Ordered Pages 3 用Taxonomies对内容进行排序 请参考Taxnomy Ordering Documentation。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

原型 | Hugo 11

Sat, Jan 17, 2015
转载请注明出处! 译文链接:原型 英文原文:Archetypes 在Hugo v0.11中介绍了内容构建器的概念。使用以下命令:hugo new [relative new content path],你就可以创建一个自动设置了时间和名称的内容文件。虽然这是一个受欢迎的功能,但活跃的作者需要的更多。 Hugo体现了原型(archetypes)的概念,原型是具有预设置front matter的典型内容文件。只要你运行hugo new命令,front matter就会操作每个内容文件。 例子 第一步:创建archetype 在这个示例场景,我们有一个具有单一内容类型(博客文章)的博客。我们将使用’tags’和’categories’作为我们的分类,所以让我们先创建一个具有预定义’tags’和’categories’的原型文件,如下所示: +++ tags = ["x", "y"] categories = ["x", "y"] +++ 警告:一些编辑器(比如:Sublime,Emacs)不会在文件的结尾(如EOF)插入EOL(end-of-line)字符。如果当使用hugo new命令时得到strange EOF error错误,请打开每个原型文件(比如:archetypes/*.md)并在紧接着+++或---之后按回车键以返回必要的空白。 第二步:使用archetype 现在由于已经有了archetypes/default.md文件,所以让我们使用hugo new命令在postsection创建一个新的内容: $ hugo new post/my-new-post.md Hugo会创建一个具有以下内容的文件: content/post/my-new-post.md +++ title = "my new post" date = "2015-01-12T19:20:04-07:00" tags = ["x", "y"] categories = ["x", "y"] +++ 我们可以看到title和date变量已经被添加上了,另外tags和categories变量是从archetype/default.md文件中转换过来的。 恭喜!我们已经成功地创建了原型文件,并且在我们新的内容文件中使用了它。这一切就是这么简单! 使用不同的front matter格式 默认情况,front matter会以TOML格式创建,不管原型文件使用什么样的格式。 你可以在站点范围的配置文件(如,config.toml)中通过使用MetaDataFormat指令指定其他的默认格式。可能的值有"toml","yaml"以及"json"。 使用了哪个archetype 适用以下规则:

内容类型 | Hugo 10

Sat, Jan 17, 2015
转载请注明出处! 译文链接:内容类型 英文原文:Content Types Hugo完全支持不同内容类型。每个内容类型可以有一系列独有的元数据和模板,并且可以通过使用content archetypes的新命令进行自动创建。 当需要多种类型时,一个比较好的例子就是参考Tumblr。一段内容既可以是图片,也可以是引用,也可以是文章,每种类型都具有不同的元数据,并且会以不同的方式展现出来。 分配内容类型 Hugo假设你的站点会被组织到sections中,并且每个section都会使用相应的类型。如果你正在利用这一点,那么你放进section中每个新的内容片段都会自动地继承该类型。 或者,你可以在元数据中的”type”键下设置type参数。 创建特定类型的新内容 Hugo可以创建新的内容文件,并且可以通过与类型相对应的数据来操作front matter。Hugo通过利用archetypes来实现此功能。 要创建新的内容,使用如下命令: hugo new relative/path/to/content.md 比如,如果我想要在内容section里创建新的文章,我可以键入以下命令: hugo new post/my-newest-post.md 定义内容类型 在Hugo中,创建新的内容类型也是很容易的。你只需要提供模板和原型,新类型就会去使用了。你只需要定义模板,原型和/或内容类型的唯一视图就可以了。每当一个特定的文件不存在时,Hugo就会回退到使用通用模板和默认的原型。 请记住,下面所有的内容都是可选的: 创建类型目录 在layouts中用类型名称创建一个目录。类型始终是单数形式。比如:/layouts/post。 创建single模板 在你创建的目录下创建一个名字为single.html的文件。比如:/layouts/post/single.html。 创建list模板 在你创建的目录下创建一个名字为list.html的文件。比如:/layouts/post/list.html。 创建views 许多网站支持以不同的方式显示内容,比如,当将一系列内容显示在同一个页面上时会使用单一页面视图和概要视图。这里对于你想如何展示你的内容Hugo不会做任何的架设,并且Hugo支持的内容类型的不同视图与你网站所需要的一样多。所有这些额外的视图所需要的是在每个layouts/TYPE目录下存在与名字相同的模板。 创建相应的archetype 在/archetyps目录下创建一个名叫type.md的文件。比如:/archetypes/post.md。 更多关于archetypes的细节可以在archetypes docs中找到。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Sections | Hugo 9

Sat, Jan 17, 2015
转载请注明出处! 译文链接:Sections 英文原文:Sections Hugo相信你是有目的的组织你的内容的。组织源内容的目录结构同样也被用来组织网站展现的目录结构。(参考Organization)。 遵循这种模式,Hugo使用内容组织结构的最顶层作为Section。 下面的例子使用了两个sections,”post”和”quote”。 . └── content ├── post | ├── firstpost.md // <- http://1.com/post/firstpost/ | ├── happy | | └── ness.md // <- http://1.com/post/happy/ness/ | └── secondpost.md // <- http://1.com/post/secondpost/ └── quote ├── first.md // <- http://1.com/quote/first/ └── second.md // <- http://1.com/quote/second/ Section列表 Hugo会自动创建每个section根目录下的所有页面,并会列出该section下的所有内容。参考List Templates获取自定义它们表现形式的详细信息。 Sections和Types 默认情况,一个section下创建的所有内容都会使用匹配section名字的内容类型。 定义在front matter中的section变量具有同样的效果。 要改变给定内容的类型,可以直接在front matter中定义type变量。 如果还没有指定给定类型的布局,那么将会使用默认类型模板来代替已经存在的类型布局。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

Front Matter | Hugo 8

Sat, Jan 17, 2015
转载请注明出处! 译文链接:Front Matter 英文原文:Front Matter front matter是赋予Hugo实力的特性之一。正确的使用它可以使你在内容中包含元数据。Hugo支持几种不同的格式,每种格式都包含它们自己的识别标记。 支持的格式: TOML, 通过+++来识别。 YAML, 通过---来识别。 JSON, 一个JSON对象,它是由’{‘和’}‘包围着的,其中每一项占据其中一行。 TOML例子 +++ title = "spf13-vim 3.0 release and new website" description = "spf13-vim is a cross platform distribution of vim plugins and resources for Vim." tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ] date = "2012-04-06" categories = [ "Development", "VIM" ] slug = "spf13-vim-3-0-release-and-new-website" +++ Content of the file goes Here YAML例子 --- title: "spf13-vim 3.

内容目录结构 | Hugo 7

Sat, Jan 17, 2015
转载请注明出处! 译文链接:内容目录结构 英文原文:Content Organization Hugo使用Markdown文件作为内容,该文件具有称为front matter的通用头部信息。Hugo尊重你为内容提供的组织结构,所以会尽量减少其他额外的配置,即使这也可以通过在front matter中加入配置进行覆盖。 目录结构 在Hugo中,内容应该被组织成与网站上展现出来的结构一样。不需要任何的额外配置,下面的内容就可以正常工作。Hugo支持任何级别的内容嵌套。最顶层结构在Hugo中是特别的,它被用来作为section。 . └── content ├── post | ├── firstpost.md // <- http://1.com/post/firstpost/ | ├── happy | | └── ness.md // <- http://1.com/post/happy/ness/ | └── secondpost.md // <- http://1.com/post/secondpost/ └── quote ├── first.md // <- http://1.com/quote/first/ └── second.md // <- http://1.com/quote/second/ 这是运行hugo --uglyurls生成的相同的组织结构: . └── content ├── post | ├── firstpost.md // <- http://1.com/post/firstpost.html | ├── happy | | └── ness.md // <- http://1.

源目录结构 | Hugo 6

Sat, Jan 17, 2015
转载请注明出处! 译文链接:源目录结构 英文原文:Source Organization Hugo具有一个单一的目录,并且用它作为创建一个网站的输入。 源目录的顶层基本上具有以下内容: ▸ archetypes/ ▸ content/ ▸ layouts/ ▸ static/ ▸ themes/ config.toml 点击下面连接更多关于不同的目录以及它们的作用: config archetypes content layouts static themes 例子 典型的目录结构会像下面这样: . ├── config.toml ├── archetypes | └── default.md ├── content | ├── post | | ├── firstpost.md | | └── secondpost.md | └── quote | | ├── first.md | | └── second.md ├── layouts | ├── _default | | ├── single.

配置Hugo | Hugo 5

Sat, Jan 17, 2015
转载请注明出处! 译文链接:配置Hugo 英文原文:Configuring Hugo 目录结构和模板就是网站最主要的呃配置。事实上,对于许多网站甚至都不需要配置文件,因为默认会遵循常用的模式。 Hugo期望于在源目录的根路径下找到配置文件,并且首先查找的是config.toml文件。如果没有找到,那么它会接着查找config.yaml文件,再然后会查找config.json文件。 配置文件是用于站点的配置。配置文件会指定hugo以什么方式构建网站,以及配置站点范围内的参数和菜单。 例子 下面是一个典型的yaml配置文件的例子: --- baseurl: "http://yoursite.example.com/" ... 而下面是一个具有默认值的toml配置文件的例子。[params]下的值会体现在.Site.Params变量上,这可以用在模板中: contentdir = "content" layoutdir = "layouts" publishdir = "public" builddrafts = false baseurl = "http://yoursite.example.com/" canonifyurls = true [indexes] category = "categories" tag = "tags" [params] description = "Tesla's Awesome Hugo Site" author = "Nikola Tesla" 下面是一个设置了更多选项的yaml配置文件: --- baseurl: "http://yoursite.example.com/" title: "Yoyodyne Widget Blogging" footnotereturnlinkcontents: "↩" permalinks: post: /:year/:month/:title/ params: Subtitle: "Spinning the cogs in the widgets" AuthorName: "John Doe" GitHubUser: "spf13" ListOfFoo: - "foo1" - "foo2" SidebarRecentLimit: 5 .

使用Hugo | Hugo 4

Sat, Jan 17, 2015
转载请注明出处! 译文链接:使用Hugo 英文原文:Using Hugo 确保hugo在你的PATH路径下,或者已经将路径指向了它。 $ hugo help A Fast and Flexible Static Site Generator built with love by spf13 and friends in Go. Complete documentation is available at http://gohugo.io Usage: hugo [flags] hugo [command] Available Commands: server Hugo runs its own webserver to render the files version Print the version number of Hugo check Check content in the source directory benchmark Benchmark hugo by building a site a number of times new [path] Create new content for your site help [command] Help about any command Available Flags: -b, --baseUrl="": hostname (and path) to the root eg.

Hugo的安装 | Hugo 3

Sat, Jan 17, 2015
转载请注明出处! 译文链接:Hugo的安装 英文原文:Installing Hugo Hugo是用Go来编写的,因此它支持多个平台。 最新的发布版本可以在Hugo Releases中找到。我们现在构建了Windows,Linux,FreeBSD以及OS X的x64和i386的多个版本。 安装Hugo(二进制安装包) 安装非常简单。从Hugo Releases下载适合你的平台的相应版本。只要下载下来之后就可以从任何地方运行它。你并不需要将它安装在一个全局位置。它同样可以运行在共享主机以及其他没有权限的系统中。 理想情况下,你应该将它安装在你PATH环境变量下的某个位置,这样使用起来比较方便。’/usr/local/bin’会是最可能的安装位置。 在OS X系统中,如果你安装了Homebrew,安装甚至会更加简单:只要运行brew install hugo就可以了。 安装Pygments(可选) Hugo可执行文件有一个可选的用于源码高亮(Pygments)的外部依赖。 如果你想要通过highlight shortcode具有源码高亮功能,你需要安装一个基于Python的Pygments程序。此过程在Pygments主页中有相应的描述。 升级Hugo Hugo的升级也同样简单,只要下载并替换你放在PATH路径下的可执行文件就可以。 从源码进行安装 依赖工具: Git Go 1.1+ (Windows上安装了Go 1.4+,请参考Go Issue #8090) Mercurial Bazaar 直接从Github获取源码: $ export GOPATH=$HOME/go $ go get -v github.com/spf13/hugo go get会直接获取Hugo和所有它依赖的库并放置在$GOPATH/src目录下,然后将所有东西都编译进最终的可执行文件hugo(或hugo.exe)中,你可以在$GOPATH/bin/hugo路径下找到该执行文件,现在所有就已经准备好了。 贡献 请参考贡献手册。 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]

快速入门 | Hugo 2

Sat, Jan 17, 2015
转载请注明出处! 译文链接:快速入门 英文原文:Hugo Quickstart Guide 注意:该快速入门依赖于Hugo v0.11引入的功能。如果你使用的是Hugo的早期版本,那么你需要在继续之前进行[升级](http://gohugo.io/overview/installing/)。 第一步:安装Hugo 访问Hugo Release页面并下载符合你操作系统与架构的相应版本。 保存主可执行文件为hugo(或在Windows上为hugo.exe),并放在你的PATH下的某个地方,我们将会在之后使用它。 更完整的说明可以参考Hugo的安装。 第二步:让Hugo为你创建个网站 Hugo可以为你创建一个网站框架: $ hugo new site /path/to/site 至于其余的操作,我们都将在网站目录中执行所有指令。 $ cd /path/to/site 新创建的网站将具有以下结构: ▸ archetypes/ ▸ content/ ▸ layouts/ ▸ static/ config.toml 目前为止,该网站没有任何内容,也没有进行配置。 第三步:创建内容 Hugo也同样可以创建一个内容页的框架: $ hugo new about.md 现在在content/下创建了一个新文件,它具有以下内容: +++ date = "2015-01-08T08:36:54-07:00" draft = true title = "about" +++ 注意,date被自动设置为你创建文件那个时刻的时间。 在+++下面以Markdown的格式创建内容。比如: ## A headline Some Content 以娱乐之心,让我们再创建一块内容,也同样在其中放置一些Markdown文本。 $ hugo new post/first.

Hugo介绍 | Hugo 1

Fri, Jan 16, 2015
什么是Hugo? 从这篇文章开始将对Hugo的一系列文章进行翻译,由于英语水平有限,翻译的不好,敬请谅解。 转载请注明出处! 译文链接:Hugo介绍 英文原文:Introduction to Hugo Hugo是通用的网站框架。从技术上说,Hugo是一个静态站点生成器。这就意味着,Hugo并不像WordPress,Ghost和Drupal这样的系统,它们都是运行在Web服务器上,访问者每请求一次页面它们会花费很多时间去构建页面。而Hugo是当你创建内容时就已经构建好页面了。由于网站被查看的次数远比被编辑的次数多,所以Hugo针对网站的查看和提供很好的编写体验进行了优化。 用Hugo构建网站是非常快并且非常安全的。并且它们可以在任何地方运行,包括Heroku,GoDaddy,DreamHost,GitHub Pages,Amazon S3以及CloudFront,并且也可以很好的运行在云服务器上。Hugo构建的网站不需要像Ruby,Python或PHP等花费大量的运行时间,也不需要任何的数据库。 我们认为Hugo是理想的网站创建工具。伴随着几近即时生成和每当改变立即重新构建的能力,Hugo提供了一个非常快速的反馈回路。当你在设计网站时这是非常重要的,并且在创建内容时非常有用。 Hugo都做了什么? 从技术方面说,Hugo包括了一个Markdown文件和模板文件的源目录,并且它利用这些文件目录作为输入来创建一个完整的网站。 Hugo拥有以下特点: 基本特点 极快的构建时间(每个页面约1ms)。 完全跨平台:可以运行在Mac OS X,Linux,Windows等等平台上。 易安装。 LiveRoad在你开发时立即呈现更改内容。 完全支持主题。 在任何地方托管你的网站。 组织结构 简单的组织结构。 支持网站分块。 完全自定义URL。 支持配置分类,包括分类和标签。可以根据内容创建自定义的组织结构。 可以依照你的意愿进行排序。 自动生成内容表。 动态生成菜单。 支持生成美观的URL。 支持永久链接。 支持别名(重定向)。 内容 用Markdown书写内容。 在frontmatter中支持Toml,Yaml和Json元数据。 完全可定制的主页。 支持多种内容类型。 可以自动生成摘要,也同样支持用户定义。 使用短代码来增强Markdown内部的富内容。 “易读“功能。 “计数“功能。 其他特性 支持集成Disqus评论功能。 自动创建RSS。 支持Go和Amber的HTML模板。 通过Pygments支持语法高亮。 看看roadmap中接下来会添加什么功能。 谁应该使用Hugo? Hugo适合那些喜欢在浏览器的编辑器中写文字的人。 Hugo适合那些喜欢自己手工编写属于自己的网站的人,并且还不用担心要设置复杂的运行环境,依赖性以及数据库。 Hugo适合那些想要简历博客,公司网站,portfolio,tumblog,文档,单页或者多页网站的人。 为什么会编写Hugo? 我编写Hugo最终有几个原因。首先,我对WordPress很失望,我之前的网站就是用WordPress搭建的。它呈现得很慢。我不能有效地创建我想要以及在网上写帖子所需要的内容。使用WordPress会需要不断地进行安全更新,并且总是听到有博客被人黑的恐怖消息。我讨厌使用HTML编写内容,更喜欢使用更加简单的Markdown进行编写。总之,我觉得它给了我更好的书写方式,而不是帮我书写伟大的内容。 我看了下现有的静态站点生成器,比如Jekyll,Middleman以及nanoc。所有这些都依赖复杂的安装,并且呈现有数百文章的博客的时间比我能接收的时间要长的多。我想要一个框架,它能够在对模板进行改变时进行快速反馈,并且5分钟上下的渲染时间依旧还是太慢。通常情况下,它们也只会专注于博客,而没有处理不同内容类型和灵活的URL的能力。 我想开发一个快速并功能齐全而又没有任何依赖的网站框架。Go语言似乎有我对于一门语言所需要的多有特性。我开始用Go语言开发Hugo,在这个过程中我爱上了这个语言。我希望你会喜欢(并促进)Hugo,就像我编写它一样。 接下来 安装Hugo 快速入门 加入邮件列表 在Github上支持我们 讨论 [ 转载必须在正文中标注并保留原文链接、译文链接等信息。]