HTML 模板语言 pug 基础语法
如果你想要对Hexo主题进行深度美化,且你要进行深度美化的主题模板引擎使用的就是pug(如butterfly),则该文章将帮助到你
前言
给你的博客美化是博客建站中感觉重要但又可以丢掉的一点,大部分人会给自己的网站添加细节。但网上的Hexo美化还要分主题美化,一些你想要的美化功能只能在其他主题上使用,或者网上的这些美化你不喜欢,想自己整美化,那么本文章将帮助你初步了解pug,帮助你可以快速的在基于pug得主题上美化。
啥是Pug?
Pug 是一个用 JavaScript 实现的高性能的模板引擎,支持 Node.js 和浏览器运行环境,其灵感来自 Haml 项目。
判断主题是否使用pug
在一些主题上会用到pug。但不是完全。
打开如下文件夹:
直接存放在themes文件夹
博客根目录/themes/主题名/layout
npm方式安装
博客根目录/node_modules/hexo-theme-主题名/layout
如果发现该文件夹内文件后缀名为.pug,则该主题使用了pug。
安装pug
npm
1 | npm install pug |
pug 命令行
1 | npm install pug-cli -g |
一般情况下,pug在安装主题时便已安装完成。
基础语法
属性
1 | a(href="toad114514.github.io") |
标签属性和 html 类似,但其实是 js 的普通表达式。允许使用逗号作为属性分隔符,不加也可以。
本页所有事例中包括管道符号”|”的行都用于控制空格上
支持所有 js 表达式
1 | //- 已登录 |
1 | iframe( |
pug允许把属性分多行编写。
如果属性里有特殊字符,且和 js 语法产生冲突,则需要用 “” 或 ‘’ 括起来
1 | div(class="my-class" "(click)"="get()") |
如果想要在属性中使用变量,则可以使用js写属性
1 | - var url = 'pug-test.html'; |
分支
case 属于 js 的 switch 缩写,接受如下形式:
1 | - var num = 5 |
可以像js一样使用分支传递
1 | case num |
不想输出任何东西,可以明确性的加上break语句
1 | case num |
可以使用块展开的语法
1 | - var num = 5 |
代码
pug提供了在模板中嵌入js代码的可能
不输出的代码
使用 “-“ 开始一段不输出的代码
1 | - for (var i = 0; i < 5; i++) |
带输出的代码
使用 “=” 开始一段带输出的代码
1 | p |
不转义的带输出代码
不安全警告
未转义的字符输出是危险的,可能导致跨站脚本攻击
用 “!=” 开始一段未转义的带输出字符
1 | p |
注释
带输出的注释和js注释一样,它们类似标签,能生成对应的html注释,而且必须单独一行
1 | // legacy |
也有不输出的注释,在后期html渲染时不会出现对应的注释
1 | //- 仅存在于pug模板中的注释 |
一个正常的块注释如下
1 | body |
条件注释
用于分辨新老ie浏览器的特殊标识,允许直接写html风格的注释
1 | doctype html |
条件
pug条件判断的一般形式的括号是可选的,所以其实可以省略开头的 “-“,效果完全相同,类似一个常规js语法形式
1 | - var manba = ( msg: "out" ) |
oug同样提供反义版本 “unless”
1 | \\\\\\\\\\ a.pug < |
包含
包含允许你把另外的内容插入进来
main.pug
1 | doctype html |
head.pug
1 | head |
manba.pug
1 | img(src="/img/laoda.jpg") |
foot.pug
1 | footer |
继承
pug允许使用 block 和 extends 关键字进行模板继承
layout.pug 文件
1 | doctype html |
扩展布局时,只需要在新的文件里使用 extends 指出被继承的模板路径即可
现在可以定义诺干个新块去覆盖父模板的父块
ext.pug 文件里面
1 | extends layout.pug |
如下例子,content暴露出了”zha”和”zhuka”两个新块用于扩展。当然,子模块也可以把整个content覆盖。
1 | block content |
如果仅仅简单填一些东西上去而不是覆盖,这时便可使用 append / prepend。
append 在尾部部添加内容
prepend 在头部添加内容
如果你想要额外添砖加瓦,而不是推平重来,则可以这样做
1 | block append head |
在有 append 或 prepend 情况下,可以将 block 省略
1 | append head |
嵌入
pug提供多种嵌入方式
1 | - var title = "local boradcast 24.5.16" |
不仅可以嵌入js,也可以嵌入pug书写的标签
1 | p. |
迭代(循环)
pug提供了两种迭代方案,each 和 while
each迭代
pug的头等迭代方式,让你在模板中迭代数据和对象更方便
1 | ul |
允许在迭代是获得索引值
1 | ul |
同时,也允许获取键值
1 | ul |
while 循环
利用 while 创建一个循环
1 | - var i = 0 |
混入
混用允许你在pug中重复使用一整个代码块的方法
1 | //-定义 |
允许传递函数
1 | mixin brofk(num) |
结束
由于学业等问题,本文章并未写完。
本文章将会在1-2天内写完
现在,你懂了吗?