文件
Syntax
PAGE.File
Returns
hugolib.fileInfo
默认情况下,并非所有页面都由文件支持,包括顶级部分页面、分类法页面和术语页面。根据定义,当文件不存在时,无法检索文件信息。
要将上述页面之一与文件关联起来,请在相应的目录中创建一个 _index.md
文件。例如:
content/
└── books/
├── _index.md <-- 顶级部分页面
├── book-1.md
└── book-2.md
请像下面的示例中所示,通过验证文件是否存在进行防守式编码。
方法
- BaseFileName
- (
string
) 文件名,不包括扩展名。
{{ with .File }}
{{ .BaseFileName }}
{{ end }}
- ContentBaseName
- (
string
) 如果页面是分支或叶子束,为包含目录的名称,否则为TranslationBaseName
。
{{ with .File }}
{{ .ContentBaseName }}
{{ end }}
- Dir
- (
string
) 文件路径,排除文件名,相对于content
目录。
{{ with .File }}
{{ .Dir }}
{{ end }}
- Ext
- (
string
) 文件扩展名。
{{ with .File }}
{{ .Ext }}
{{ end }}
- Filename
- (
string
) 绝对文件路径。
{{ with .File }}
{{ .Filename }}
{{ end }}
- Lang
- (
string
) 与给定文件相关联的语言。
{{ with .File }}
{{ .Lang }}
{{ end }}
- LogicalName
- (
string
) 文件名。
{{ with .File }}
{{ .LogicalName }}
{{ end }}
- Path
- (
string
) 相对于content
目录的文件路径。
{{ with .File }}
{{ .Path }}
{{ end }}
- TranslationBaseName
- (
string
) 文件名,不包括扩展名和语言标识符。
{{ with .File }}
{{ .TranslationBaseName }}
{{ end }}
- UniqueID
- (
string
).File.Path
的MD5哈希值。
{{ with .File }}
{{ .UniqueID }}
{{ end }}
示例
考虑一个多语言项目中的内容结构:
content/
├── news/
│ ├── b/
│ │ ├── index.de.md <-- 叶子束
│ │ └── index.en.md <-- 叶子束
│ ├── a.de.md <-- 常规内容
│ ├── a.en.md <-- 常规内容
│ ├── _index.de.md <-- 分支束
│ └── _index.en.md <-- 分支束
├── _index.de.md
└── _index.en.md
在英语语言站点中:
常规内容 | 叶子束 | 分支束 | |
---|---|---|---|
BaseFileName | a.en | index.en | _index.en |
ContentBaseName | a | b | news |
Dir | news/ | news/b/ | news/ |
Ext | md | md | md |
Filename | /home/user/… | /home/user/… | /home/user/… |
Lang | en | en | en |
LogicalName | a.en.md | index.en.md | _index.en.md |
Path | news/a.en.md | news/b/index.en.md | news/_index.en.md |
TranslationBaseName | a | index | _index |
UniqueID | 15be14b… | 186868f… | 7d9159d… |
防守式编码
网站上的某些页面可能没有文件支持。例如:
- 顶级部分页面
- 分类页面
- 术语页面
如果没有文件支持,Hugo会在尝试访问.File
属性时抛出警告。例如:
WARN .File.ContentBaseName on zero object. Wrap it in if or with...
为了进行防守式编码,首先检查文件是否存在:
{{ with .File }}
{{ .ContentBaseName }}
{{ end }}