`
莫激动
  • 浏览: 44995 次
社区版块
存档分类
最新评论

python的web框架webpy【Templetor】(四)

阅读更多

之前我们讲的都是简单的返回文本到浏览器,例如下面将会返回hello word到浏览器

 

# coding:utf-8
import web

urls=(
      '/','index'
)

app=web.application(urls,globals())

class index:
    def GET(self):
        return 'hello word!'

if __name__ == '__main__':
    app.run()

 

 

当然我们也可以返回html到浏览器,例如

 

 

# coding:utf-8
import web

urls=(
      '/','index'
)

app=web.application(urls,globals())

class index:
    def GET(self):
        return '''
            <html>
                <head>
                    <title>hello word</title>
                </head>
                <body>
                    <p>hello word!</p>
                </body>
            </html>
        '''

if __name__ == '__main__':
    app.run()

 

 

显然我们不可能用上述方法来开发web应用,有没有更加优雅的方法。

 

所有的web框架都提供有template技术来实现复杂的web页面webpy也不例外。

在工程目录下建立templates目录(你也可以叫其他名字),这个目录用于存储我们所有的模板文件,

我们在下面建立一个叫做index.html文件内容如下

 

 

$def with (name) #这里定义传递进来的参数,后面会提到
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>hello word</title>
	</head>
	<body>
		<p>hello word!$name</p>
	</body>
</html>
 

 

现在我们就可以使用这个模板了

 

 

# coding:utf-8
import web

urls=(
      '/','index'
)

app=web.application(urls,globals())
render=web.template.render('templates')#模板目录

class index:
    def GET(self):
        return render.index('webpy')#使用index.html模板,传递参数'webpy'(这里会查找templates下第一个匹配上index.*的文件,所以我们的模板文件其实可以使用任何扩展名结尾)

if __name__ == '__main__':
    app.run()
 

 

 我们也可以指定具体的模板文件

 

 

index = web.template.frender('templates/index.html')
return index('webpy')

 

 

我们也可以直接使用字符串为模板

 

 

template = '''
    $def with (name)
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>hello word</title>
        </head>
        <body>
            <p>hello word!$name</p>
        </body>
    </html>
'''
index = web.template.Template(template)
return index('webpy')

 

 

模板种允许使用python表达式,所有表达式都要以$符号开头

 

 

Look, a $string. 
Hark, an ${arbitrary + expression}. 
Gawk, a $dictionary[key].function('argument'). 
Cool, a $(limit)ing.
 

 

还可以声明变量

 

 

$ bug = get_bug(id)
<h1>$bug.title</h1>
<div>
    $bug.description
<div>

 

 

模板变量默认是做了escape转义的

 

 

$str='1 < 2'
<p>$str</p>
输出则为:
<p>1 &lt; 2</p>
 

 

 

若想不被转义则需要在$后面加行:号

 

 

$str='1 < 2'
<p>$:str</p>
输出则为:
<p>1 < 2</p>
 

所有表达式都要以$开头那么要出$就需要用$$

 

 

$$50
输出为
$50

 

模板种注释为$#开头

 

 

$#我是注释
<p>hello word</p>

 

控制结构

 

 

$for i in range(10): 
    I like $i

$for i in range(10): I like $i

$while a:
    hello $a.pop()

$if times > max: 
    Stop! In the name of love. 
$else: 
    Keep on, you can do it.
 

在循环中可以访问的一些内置变量

 

 

loop.index: the iteration of the loop (1-indexed)
loop.index0: the iteration of the loop (0-indexed)
loop.first: True if first iteration
loop.last: True if last iteration
loop.odd: True if an odd iteration
loop.even: True if an even iteration
loop.parity: "odd" or "even" depending on which is true
loop.parent: the loop above this in nested loops

 

例如下面

 

 

<table>
$for c in ["a", "b", "c", "d"]:
    <tr class="$loop.parity">
        <td>$loop.index</td>
        <td>$c</td>
    </tr>
</table>

 

你还可以定义方法

 

 

$def say_hello(name='world'):
    Hello $name!

$say_hello('web.py')
$say_hello()
 

还可以植入python代码,使用$code:

 

$code:
    x = "you can write any python code here"
    y = x.title()
    z = len(x + y)

    def limit(s, width=10):
        """limits a string to the given width"""
        if len(s) >= width:
            return s[:width] + "..."
        else:
            return s

And we are back to template.
The variables defined in the code block can be used here.
For example, $limit(x)

 

当然也可以使用layout

 

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

 

上面会使用 templates/layout.html 作为 layout

layout.html内容:

 

$def with (content)
<html>
<head>
    <title>Foo</title>
</head>
<body>
$:content
</body>
</html>
 
分享到:
评论

相关推荐

    web.py教程

    web.py是python语言的一个web开发框架,本教程将对web.py的基本应用、提高应用、实用工具、模板、测试、用户输入、数据库、部署和子域名等方面进行讲解。 基本应用 1. Hello World!:展示如何使用web.py实现Hello ...

    web.py中文教程

    web.py是一个轻量级的Python框架,它帮助开发者用Python构建web应用。它提供了基本的web应用功能,如处理请求、定义URL模式、生成HTML输出等。本教程针对web.py的0.3版本编写,因此在实际应用中需要确保代码与新版本...

    Webpy-coobook-pdf中文教程

    - **Templetor: web.py模板系统**:介绍web.py内置的模板系统。 - **使用站点布局模板**:说明如何使用布局模板来组织页面结构。 - **交替式风格**:虽然未翻译,但可以推测是指在web.py中实现不同的页面样式切换...

    templator:从WebPy提取的模板引擎

    WebPy是一个轻量级的Python Web框架,而`Templator`是其内建的模板系统,用于处理动态网页内容的生成。 **Python 2.x / 3.x兼容性** `Templator`设计时考虑了向后兼容性,支持Python 2.x以及3.x版本。这意味着无论...

    基于spring boot框架药品购买系统-a7imn57w.zip

    基于spring boot框架药品购买系统_a7imn57w.zip

    "基于滑模磁链的改进无位置控制技术:减小转矩脉动与抖振,降低电流THD并优化参数依赖",结合滑模和磁链的改进滑模磁链无位置控制,相比于传统的滑模观测器,能有效减小转矩脉动和抖振现象,降低电流THD

    "基于滑模磁链的改进无位置控制技术:减小转矩脉动与抖振,降低电流THD并优化参数依赖",结合滑模和磁链的改进滑模磁链无位置控制,相比于传统的滑模观测器,能有效减小转矩脉动和抖振现象,降低电流THD。 传统的磁链观测器对电气参数非常敏感,改进的磁链观测器将滑模控制率和磁链观测器结合,有效降低了对参数的依赖。 该模型针对特定的小电感电阻电机进行了验证。 ,核心关键词:滑模磁链无位置控制;改进滑模;磁链观测器;传统滑模观测器;电气参数依赖;电流THD;小电感电阻电机验证,好的,根据您提供的关键信息,提炼的标题如下: "结合滑模与磁链技术的改进型无位置控制策略,有效减小抖振与电流THD" 此标题直接体现了该策略结合了滑模和磁链技术,并有效减小了转矩脉动、抖振现象以及电流THD。希望符合您的要求。

    红外轮廓提取python代码

    红外轮廓提取python代码

    (源码)基于Raspberry Pi 3b的STM原子力显微镜控制系统.zip

    # 基于Raspberry Pi 3b的STM原子力显微镜控制系统 ## 项目简介 本项目是一个基于Raspberry Pi 3b的STM(扫描隧道显微镜)控制系统,旨在实现对原子力显微镜的高精度控制和图像采集。通过结合Arduino Uno和ADS1115、AD5764等硬件设备,项目实现了对显微镜的多种操作模式和图像处理功能。 ## 项目的主要特性和功能 1. 信号采集与控制 使用ADS1115进行z轴信号的采集。 通过Arduino Uno控制AD5764,实现对压电驱动器的精确控制。 2. 图像处理 实现3D图像的采集和处理。 3. 操作模式 支持两种操作模式 1. 恒高模式在扫描过程中保持高度恒定。 2. 恒流模式在扫描过程中保持电流恒定。 4. 粗略定位 使用步进电机进行粗略的初始定位。 ## 安装使用步骤 1. 硬件连接

    毕业设计&课程设计&毕设&课设-java-超市管理系统

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    在线课程管理系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料 录屏:https://www.bilibili.com/video/BV15S421o7Do 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC

    【GO】关于一个分布式事务的中间件,目前通信是走的http协议.zip

    【GO】关于一个分布式事务的中间件,目前通信是走的http协议

    【爬虫】(天猫,淘宝,京东)爬虫,根据query词爬取数据(Python+Scrapy+MongoDB)_pgj.zip

    【爬虫】(天猫,淘宝,京东)爬虫,根据query词爬取数据(Python+Scrapy+MongoDB)_pgj

    基于三菱PLC与组态王技术的鸡舍温湿度智能控制系统在养鸡场的应用与优化-No.909解决方案,No.909 基于三菱PLC和组态王鸡舍温湿度控制养鸡场 ,三菱PLC; 温湿度控制; 鸡舍

    基于三菱PLC与组态王技术的鸡舍温湿度智能控制系统在养鸡场的应用与优化——No.909解决方案,No.909 基于三菱PLC和组态王鸡舍温湿度控制养鸡场 ,三菱PLC; 温湿度控制; 鸡舍养鸡场; 组态王控制系统; No.909,基于三菱PLC与组态王技术的鸡舍温湿度控制方案

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研发; No.945,"三菱PLC与触摸屏在气压传动焊条包装线研发项目No.945中的应用"

    (源码)基于Spring Boot和Spring Integration的微服务购物系统.zip

    # 基于Spring Boot和Spring Integration的微服务购物系统 ## 项目简介 本项目是一个基于Spring Boot和Spring Integration的微服务购物系统,旨在提供一个高效、可扩展的在线购物平台。系统通过微服务架构实现各个功能模块的解耦,包括商品管理、购物车、订单处理、配送服务等。Spring Integration用于实现服务间的消息传递和集成。 ## 项目的主要特性和功能 1. 商品管理 商品的添加、删除和查询。 从京东网站抓取商品信息。 2. 购物车功能 添加商品到购物车。 从购物车中删除商品。 购物车结账生成订单。 3. 订单处理 订单的创建和状态管理。 订单的供应和结账流程。 4. 配送服务 根据订单生成配送信息。 配送状态的管理和查询。 5. 服务注册与发现

    基于Omron PLC与MCGS组态的自动化售货机控制系统研究与应用:No.848 实践探索与效果分析,No.848 基于Omron PLC和MCGS组态机控制 ,基于Omron PLC

    基于Omron PLC与MCGS组态的自动化售货机控制系统研究与应用:No.848 实践探索与效果分析,No.848 基于Omron PLC和MCGS组态机控制 ,基于Omron PLC; MCGS组态; 售货机控制; 848号项目,基于Omron PLC与MCGS组态的售货机控制系统研究No.848

    基于springboot+vue的人事工资管理系统设计与实现【源码+数据库】

    参考链接:https://www.bilibili.com/video/BV1ZYNHetEaY/?vd_source=bf2d43514ea61b1121399ab65421e37c 前端:Vue 后端:SpringBoot 数据库:MySQL 有数据库文件,项目完整 1、登录模块 可以登录成功和退出登录。 2、用户管理模块 可以添加、删除、修改、查询用户信息。 3、部门管理模块 可以添加、删除、修改、查询部门信息。 4、出勤管理模块 可以查询和编辑出勤信息。 5、工资管理模块 可以查询和编辑工资信息。 6、奖惩管理模块 可以添加、删除、修改、查询奖惩信息。 7、员工管理模块 可以添加、删除、修改、查询员工信息。

    昇腾硬件上面向算子开发场景的编程语言Ascend C的高阶类库ascendc-api-adv-master.zip

    昇腾硬件上面向算子开发场景的编程语言Ascend C的高阶类库ascendc-api-adv-master.zip

    "中央空调时间控制启停的优化:西门子1200PLC与TP900触摸屏模拟仿真程序在博途V16环境下的应用与探讨",中央空调改时间控制启停西门子1200PLC和TP900触摸屏模拟仿真程序博途V16

    "中央空调时间控制启停的优化:西门子1200PLC与TP900触摸屏模拟仿真程序在博途V16环境下的应用与探讨",中央空调改时间控制启停西门子1200PLC和TP900触摸屏模拟仿真程序博途V16 ,中央空调; 时间控制启停; 西门子1200PLC; TP900触摸屏; 模拟仿真程序; 博途V16,"中央空调的定时启停:Siemens 1200PLC与TP900触摸屏模拟仿真程序V16"

    Java多线程核心技术解析及常见面试题详解

    内容概要:这份PDF文档系统梳理了Java多线程的核心概念和技术,涵盖了基础知识、锁机制、线程池以及典型应用场景等关键主题。主要内容包括:多线程的基础知识点(并行与并发区分、线程和进程差异及其创建方式)、创建和使用线程的多种方式及其实现;详细讨论了几种常用的并发锁机制(synchronized、AQS、ReentrantLock等);深入介绍了不同类型的线程池及其配置参数的选择依据;探讨了常见的线程控制工具(如Semaphore和CountDownLatch);并讲解了一些高级话题(例如死锁检测与预防、ThreadLocal的作用)及相关的真实面试情景还原。 适用人群:对于具有一定Java编程经验、希望进一步掌握或复习多线程编程技巧的人士而言是非常有用的资料。特别适用于准备求职面试的技术人员。 使用场景及目标:该资料可以帮助开发者理解并发编程的基本原理,熟练运用各类同步原语和容器以构建高效的并发应用程序;此外,文中提供的面试指南有助于应聘者针对可能出现的技术难题做好充分准备。 其他说明:尽管本资料详尽地阐述了许多理论知识,但在实践中还需结合实际情况做出合理的优化决策。 适合人群:具有一定Java基础并且对多线程感兴趣的开发人员,尤其是那些想要深入了解多线程机制并对自己的职业发展有所规划的人。 使用场景及目标:帮助程序员加深对Java多线程编程技术的认知,提升应对复杂任务的能力;同时也是备战工作中可能遇到的各种多线程面试考题的有效参考资料。 阅读建议:此资源适合循序渐进地学习,先从简单的概念入手逐步过渡到较为复杂的主题,对于关键技术和实用的例子可以适当做一些练习加深理解和记忆。

Global site tag (gtag.js) - Google Analytics