自定义 404 页面

支持自定义 404 页面(访问错误网址时显示的页面), 并且支持 404 页面国际化

添加 404 错误页面

site_config 中设置 网站根目录 的url与路径的映射,比如

    "route": {
        "pages": {
            "/": "pages/index/zh"
        }
    },
    "translate": {
        "pages": {
            "/": [ {
                    "url": "/en/",
                    "src": "pages/index/en"
                }
            ]
        }
    }

这里将 网站根目录(/)映射到了文件夹pages/index/zh, 则只需要创建文件pages/index/zh/404.md,然后添加内容:

---
layout: 404.html
---

或者

---
layout: 404
---

用户访问错误的路径时就会返回这个页面

404 错误页面国际化

如上面所说的网站根目录配置, 在pages/index/zh下的config文件如果配置localezh, 则生成的/404.html内容为中文

如果用户的浏览器语言设置的其它语言,比如英文en, 则会试图跳转到/en/404.html, 所以我们只需要:

  • site_config中配置好translate的路径映射,如上面的示例所示
  • 然后新建pages/index/en/404.md, 添加内容
---
layout: 404.html
---

如果locale有后缀,比如zh_CN, en_US等,404页面会自动尝试跳转到和浏览器设置的语言相同的页面, 比如/en_US/404.html/en-US/404.html/en-us/404.html/en_us/404.html直到跳转到页面语言和浏览器语言相同则停止跳转,当所有链接都尝试跳转失败后也会停止跳转

如果你需要的语言没有被翻译, 有两种方法:

  • 可以通过自定义 404 页面来实现
  • 也可以贡献翻译, 到这里fork仓库, 然后git clone你的仓库到本地, 在locales.cfg文件里面添加新的语言,然后执行python trans_prepare.py,这会在locales目录下生成新的翻译文件,后缀为.po,翻译这个文件(翻译po文件你可以直接修改文本,也可以用其它工具翻译),然后执行python trans_finish.py就会生成mo二进制文件,没有错误就可以提交更改,然后在github创建PR(Pull Request)来贡献翻译到teedoc仓库

自定义 404 错误页面内容

直接基于主题的模板修改,或者继承主题的模板,比如小改一下404.html页面的body部分,只需在layout目录下新建一个my_404.html, 注意文件名不能和内置的文件名冲突, 如果冲突会提示generate html fail: maximum recursion depth exceeded in comparison:

{% extends "404.html" %}

{% block body_404 %}

这里是 body
{{ body|safe }}

{% endblock%}

然后在404.md中使用这个模板

---
layout: my_404.html
---