webpy框架拥有自己的模版语言Templetor

Templetor具有Python的语言风格

可以直接嵌入Python代码

$code:
videoIn = post.filename and post.filename.split('.')[-1] in ['MP4']
imageIn = post.filename and post.filename.split('.')[-1].upper() in ['JPG']

Templetor所使用的转义字符是$, $code:表示接下来的是Python代码

与Python一样,Templetor需要保持正确的缩进,而没有标识模版开始与结束的语句

一、模版中的变量

使用模版的一个重要原因是,不同的页面只有少许文字的差异,模版在那些不同的地方定义适当的变量就可以很好地解决这个问题

Templetor模版语言中,在模版的开始,需要用$define with声明模版所使用的变量

hello.html

$def with (name)
Hello $name!

声明的变量必须与视图函数传入的变量保持一致,

render = web.template.render('templates')
return render.hello('world')

web.template.render创建了一个渲染函数,'templates'是模版所在的目录

hello表示模版的名称,'world'便是传入模版的参数

和Python一样,模版语言中的变量也有不同的类型

如果是字符串或数值,$variable便可直接获得变量的值

非常不错的一个地方是,变量还可以是数组,字典,你可以用和Python相同的方式在模版中进行引用

但更为方便的是使用for循环控制结构

$for post in posts: #和Python完全相同的语法
<div class="item">
<a href="/view/$post.id">$post.title</a>
$if context.user != 'anonymous' and context.user == post.username:
<div class="edit"><a href="/edit/$post.id">Edit</a></div>
<div class="date">$post.posted_on[0:19]</div>
<div>$post.content[0:100]</div> #对于字符串一样地可以进行切片
</div>

需要注意的是在控制结构中,引用变量不再需要在前面加上$符号

二、模版的继承

使用模版的一个重要原因在于,网页包含许多共同的导航栏或是页脚,可以设计一个基础的模版,然后在此基础上进行扩展

render = web.template.render('templates', base='base')

base.html(.html被省略)就是这个基础模版,

父模版和其他模版一样需要在首行声明,所引用的变量

$def with (page)

在视图函数中会隐式地将子模版传入page变量中

通过$:page可以获得子模版的全部内容

你可以在子模版中定义变量,这在子模版中有引用css文件时变得尤为必要

$var cssfiles: /static/index.css /static/common.css #甚至用一个变量可以引用多个css文件

在父模版中,便可吧css文件的引用放在合适的位置

<head>
$if page.has_key('cssfiles'): #判断子模版中是否定义了cssfiles变量
$for f in page.cssfiles.split():
<link rel="stylesheet" href="$f" type="text/css">
</head>

webpy 模版语言的更多相关文章

  1. Django模版语言 格式化显示 后台datatime()时间

    Django模版语言 格式化显示 后台datatime()时间 场景描述:

  2. Jinja2模版语言自定义filter的使用

    Jinja2模版语言,自带有一些filter,能够在前端的模版中控制数据按照相应的方式显示.比如以下两种filter,分别能在前端控制数字的近似精度显示和根据字符串长度补齐: round(value, ...

  3. puppet(4)-类、模版语言、模块

    puppet(4)-类.模版语言.模块 代码重用: class, module 类 类的简单说明 类是用于公共目的的一组资源,是命名的代码块,创建后可在puppet全局进行调用,类可以继承类是我们构建 ...

  4. Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

    include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...

  5. django -- url (模版语言 {% url 'test1' param1=5 param2=6 %})

    如果想让form表单提交的url是类似 action="/index-5-6.html" 这样的,可以在html模版语言中使用{% url 'test1' param1=5 par ...

  6. django -- url (模版语言{{ request.path_info }})

    在django的模版语言中中可以使用   {{ request.path_info }} 帮助生成url. urls.py from django.conf.urls import url, incl ...

  7. Django 模版语言

    传入变量 {{ 变量名 }} 在 view.py 的函数返回 render 时在html文件名后传入一个字典,字典的 key 对应html文件中的变量名,value 为传入的值 views.py: d ...

  8. django -- 模版语言之过滤器Filters和for循环

    前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }}            变量相关的 {% %}      ...

  9. Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag

    Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...

随机推荐

  1. SFM

    1.相机模型,内参数和外参数矩阵,相机标定: 2.极线约束和本征矩阵:特征点提取与匹配:提取到的特征点计算本征矩阵(五对以上的点)findEssentialMat(),需啊要点对,焦距参数,cx,cy ...

  2. OS开发中的事件处理(二)-事件传递,响应者链条

    事件处理的事件传递 简介: 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件 队列中,UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理, ...

  3. git revert HEAD

    使用git reset回退公共远程分支的版本后,需要其他所有人手动用远程master分支覆盖本地master分支,显然,这不是优雅的回退方法,下面我们使用另个一个命令来回退版本: git revert ...

  4. Microsoft office 2013安装图解

    Microsoft office 2013安装图解... ================ 简介: Microsoft Office 2013(Office 15)是微软的新一代Office办公软件, ...

  5. scrapy架构设计分析

    scrapy是一个Python爬虫框架.我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?下面就来讨论下这个话题,看看业 ...

  6. CMDB资产管理系统开发【day26】:CMDB上节回顾

    一.上节知识点回顾 服务器设计了一个表结构 开发了一个客户端 二.后台创建缓存区表 客户端连接服务器,在服务器的下面看报错信息 因为URL都没有写,所以我找不到呀 1.在MadKing\url.py ...

  7. React Mixin

    为什么使用 Mixin ? React为了将同样的功能添加到多个组件当中,你需要将这些通用的功能包装成一个mixin,然后导入到你的模块中. 可以说,相比继承而已,React更喜欢这种组合的方式. 写 ...

  8. js的数据类型--数字

    近期做一些项目的时候发现,自己的js基础还是不够扎实,再看一遍犀牛书,加深自己的理解和印象.所以从这篇文章开始,后面都是关于原生js的一些内容. 这篇文章,我们具体介绍一下js的数据类型其中一种. j ...

  9. 洛谷 P1044 栈

    题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...

  10. django自带分页代码

    django分页 {% if is_paginated %} <div class="pagination-simple"> <!-- 如果当前页还有上一页,显示 ...