我最喜欢的模板jade(pug)学习和使用

由于版权问题,现已改名pug.但无须担心,几乎没什么区别.就算依然使用jade也不会有太大影响. 慢慢迁移过渡即可

# 官网
https://pugjs.org

# github
https://github.com/pugjs/pug

# 文档地址https://pugjs.org/language/inheritance.html

# 入门指南https://pugjs.org/api/getting-started.html

安装pug

# 全局安装cli
npm install pug-cli -g

# 本地安装
npm install pug --save-dev

为了符合大众教材,依然使用jade也无伤大雅

# 创建文件夹和文件
mkdir jade-test && touch index.js index.jade

# 安装依赖
npm init -y && cnpm install jade --save

# 安装全局jade
cnpm install jade -g  

index.jade

.header
    h1 #{title}
    p
.body
    p #{body}
.footer
    div #{By}
        a(href="http://www.baidu.com/#{author.twitter}") #{author.name}
    ul
        each tag, index in tags
            li #{tag}

index.js

var jade = require(‘jade‘)
var fs = require(‘fs‘)

var data = {
    title : "my title",
    author: {
        twitter: "@Lee",
        name: "Azat"
    },
    tags: [‘express‘, ‘node‘, ‘javascript‘]
}

data.body = process.argv[2]

// jade.compile
fs.readFile(‘index.jade‘, ‘utf-8‘, function (error, source) {
    var template = jade.compile(source);
    var html = template(data)
    console.log(html);
})

// jade.renderFile
jade.renderFile(‘index.jade‘, data, function (error, html) {
    console.log(html)
})

运行jade: node index.js ‘email body‘

block 和 extends 、append(后) / prepend(前)

# API官方文档https://pugjs.org/language/inheritance.html

layout.pug

doctype html
html(lang=‘en‘)
    head
        title= appTitle
    body
        block content
    footer
        block footer
            | ? 2009-2017 CyLeeBlog.com 版权所有 ICP证:粤S-172RM    

index.pug

extends ./includes/layout.pug
block content
    h1 #{title}
    p Welcome to #{title}
block append footer
    script
        | window.alert(‘123‘)

login.jade

extends ./includes/layout.pug
block content
    h1= title
    form(method="post")
        | 用户名:
        input(name="name")
        br
        | 密码:
        input(nane="pwd")

运行效果图如下: 可以看到不仅继承了 layout,在 content 块中添加了个性内容, 还成功的往 footer 块中添加了脚本,进一步灵活和个性化:

除了学到 block 和 extendsappend / prepend 的配合使用。还知道了。只要你不是变量,或者说你想以字符串开始。标签的后面必须是“”来声明。才能正常使用字符串或者 Javascript 脚本。而如果是字符串和变量嵌套,则变量需要使用#{变量}的形式书写。非常简单.



使用cli快速编译为html

(注:需要先安装全局pug-cli)

layout.pug

doctype html
html(lang=‘en‘)
    head
        title= title
    body
        h1= title
        p Welcome to #{title}
        ul
            li
                a(href="/") home
            li
                a(href="/login") login
            li
                a(href="/reg") reg
        block content
    footer
        block footer
            | ? 2009-2017 CyLeeBlog.com 版权所有 ICP证:粤S-172RM

命令行输入:

# 查看帮助
pug --help

# 编译为html
pug .\layout.pug -p layout.html

# 编译并且赋值
pug .\layout.pug -O "{title: ‘fuck you‘}" .\layout.html

# 监听并且实时改变html
pug .\layout.pug -w layout.html

if 条件判断

https://pugjs.org/language/conditionals.html

layout.pug

doctype html
html(lang=‘en‘)
    head
        title= title
    body
        h1= title
        p Welcome to #{title}
        ul
            li
                a(href="/") home
            if user
                li
                    a(href="/login") publish
                li
                    a(href="/reg") logout
            else
                li
                    a(href="/login") login
                li
                    a(href="/reg") reg
        article
            if success
                div= success
            if error
                div= error
        block content
    footer
        block footer
            | ? 2009-2017 CyLeeBlog.com 版权所有 ICP证:粤S-172RM
时间: 2024-10-05 13:34:10

我最喜欢的模板jade(pug)学习和使用的相关文章

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

[ExtJS学习笔记]第七节 Extjs的组件components及其模板事件方法学习

本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://ww

照虎画虎——简单WeUI模板UX设计学习

艺术虽然分为独立的各个领域,但是总有相通之处.UI/UX设计也是一种艺术,就像美术一样,UI/UX的设计也需要大量的临摹其他优秀作品来提高自己的水平. 不过俗话说:"照猫画虎",如果你临摹的对象不合适,很有可能只得其形而不得其意.那么,到哪里去寻找合适的临摹素材,做到"照虎画虎"?其实很多知名软件的新动向,都值得我们去参考,比如微信小程序的设计工具:WeUI. 首先我们需要找到WeUI的模板,其实想要找到这个,也并不是很难,在Mockplus的例子项目中,有大量的国

Python模板引擎jinja2学习

Jinja是一个python的模板引擎. 可以使用pip install jinja2安装 In [61]: from jinja2 import Template In [62]: template = Template('Hello {{ name }}!') In [63]: template.render(name='John Doe') Out[63]: u'Hello John Doe!' 参考文档: http://jinja.pocoo.org/docs/dev/

【第一天】django快速开发——环境部署、表单、数据库操作、模板、文件学习

安装django 1.安装 setuptools yum install python-setuptools 2.完成之后,就可以使用 easy_install 命令安装 django easy_install django 注意:django对于pip和setuptools的版本有严格要求,如果不想那么麻烦建议直接装个python3.6 django管理命令 django-admin.py 这是django的管理命令,无论在哪个目录都可以用这个命令来对project或app做操作 最常用的命令

twig模板的进一步学习以及在symfony当中的使用

首先,twig可以理解为用于输出html代码的,虽然用PHP等其他语言也可以输出,但是twig更为简洁高效,同时twig模板被编译成原生的php类缓存起来,所以才会这么快, 其实twig跟php类差不多我感觉,可以进行继承重写,创建一个基类模板,之后的模板都可以继承他并且重写他的任何一个block twig模板可以和for,if语句完美结合,比如下面这个例子,以无序方式循环输出用户名,同时根据用户名是否存在进行不同的操作 ,注意以{% endfor %}来结束for语句 <ul> {% for

标准模板库(STL)学习探究之Multimap容器

C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器)函数列表:begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 count() 返回一个元素出现的次数 empty() 如果multimap为空则返回真 end() 返回一个指向multimap末尾的迭代器 equal_range() 返回指向元素的key为指定值的迭代器对 erase() 删除元素 find() 查找元素 get_allocator() 返回mult

pug模板引擎(原jade)

前面的话 为什么要引入pug,pug有什么特别之处呢?有一些嵌套层次较深的页面,可能会出现巢状嵌套,如下图所示 在后期维护和修改时,一不小心少了一个尖括号,或者某个标签的开始和闭合没有对应上,就会导致DOM结构的混乱甚至是错误.所以,有人发明了HAML,它最大的特色就是使用缩进排列来代替成对标签.受HAML的启发,pug进行了javascript的实现. Pug原名不叫Pug,是大名鼎鼎的jade,后来由于商标的原因,改为Pug,哈巴狗.其实只是换个名字,语法都与jade一样.丑话说在前面,Pu

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一 前言:前面我们基本已经完成了一个Demo,我们在后面的