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

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版本。这意味着无论...

    go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

    基于JAVA+SpringBoot+Vue+MySQL的社区物资交易互助平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

    法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip

    法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip是一个专为计算机相关专业(如计科、信息安全、数据科学与大数据技术等)学生设计的宝贵学习资源。该压缩包包含了完整的项目源码、详细的项目说明文档以及用于训练和测试的数据集,旨在帮助参赛者深入理解并掌握类案检索的相关技术和方法。该项目通过实际案例,展示了如何运用自然语言处理和机器学习技术对法律案件进行智能检索和匹配。项目内容涵盖了从数据预处理、特征提取到模型训练和评估的全过程,为学习和研究类案检索技术提供了全面的参考。本项目不仅适合作为课程设计、期末大作业或毕设项目的参考,也是企业员工提升技能、进行实践操作的优质学习资料。通过实际操作和学习该项目,用户可以加深对类案检索技术的理解,并在实践中不断提升自己的技能水平。请注意,由于该资源包含完整的项目源码和数据集,下载和使用时请确保遵守相关法律法规和道德规范,尊重知识产权和隐私权。同时,建议用户在使用前仔细阅读项目说明文档,了解项目的整体架构和使用方法,以便更好地利用该资源进行学习和研究。

    基于Cesium实现的对倾斜摄影模型的单体化分层方案源码.zip

    本资源提供了基于Cesium实现的倾斜摄影模型单体化分层方案的完整源码,旨在帮助开发者深入理解并实践三维地理空间数据的处理与展示。通过Cesium平台,用户能够将倾斜摄影获取的高精度三维模型进行单体化和分层处理,实现对模型中每个独立元素的精细管理和交互操作。该资源适合具备一定计算机编程基础的学习者,特别是对Cesium感兴趣的学生、研究人员及GIS行业从业者。通过下载并学习这些源码,用户可以掌握倾斜摄影模型在Cesium中的加载、单体化以及分层显示等关键技术,进而提升自己在三维地理信息系统开发领域的技能水平。

    Go 的 PostgreSQL 驱动程序和工具包.zip

    Go 的 PostgreSQL 驱动程序和工具包 pgx - PostgreSQL 驱动程序和工具包pgx 是 PostgreSQL 的纯 Go 驱动程序和工具包。pgx 驱动程序是一个低级、高性能接口,它公开了 PostgreSQL 特定的功能,例如LISTEN/ NOTIFY和COPY。它还包括一个标准database/sql接口的适配器。工具包组件是一组相关的软件包,用于实现 PostgreSQL 功能,例如解析线路协议以及 PostgreSQL 与 Go 之间的类型映射。这些底层软件包可用于实现替代驱动程序、代理、负载均衡器、逻辑复制客户端等。示例用法package mainimport ( "context" "fmt" "os" "github.com/jackc/pgx/v5")func main() { // urlExample := "postgres://username:password@localhost:5432/database_name" conn, err := pgx.Connect(context.B

    C#ASP.NET中小型超市管理系统源码数据库 SQL2012源码类型 WinForm

    ASP.NET中小型超市管理系统源码 超市管理系统是专门为中小型超市打造的管理系统,可以方便管理时更加准确清晰的查看商品信息, 仓库出售与进货的信息,还有每一个部门员工的信息,也更加直观的体现出每一阶段的商品销售情况; 从而提高项目管理水平,实现了工作的协同化、提高了工作效率 二、功能介绍 1.1 UI Requirements界面要求 (1)界面美观,给用户一种很舒心的感觉。 (2)界面所体现出的功能清晰明了,让用户一目了然。 (3)界面的背景颜色搭配符合超市管理系统界面的设计理念。 1.2 UI Requirements界面要求 (1) 使用ADO.NET与数据库交互制作 (2) 使用Visual Studio设计窗体布局 (3) 使用提供的用控件快速开发 1.3 Development Environment 开发环境 (1) 开发工具:Visua

    毕设&课程作业_基于C#的易知仓库管理系统.zip

    计算机系毕业设计

    Go 编程教程的主列表、其撰写、其源代码以及其当前构建状态!.zip

    教程边缘TutorialEdge.net Go 教程 ‍‍欢迎来到 TutorialEdge Go 存储库!此 repo 的目标是能够跟踪所有 Go 教程及其各自的 github repo 位置和构建状态。这些将在 Go 最新版本发布时更新和运行。目录初学者教程中级教程高级教程DevOps项目数据格式并发教程挑战初学者教程这些教程主要针对那些希望提高对 Go 语言工作原理的基本理解的语言新手!教程标题 教程边缘 Github 构建状态 更新日期01 - Go 入门 阅读教程 TutorialEdge/getting-started-with-go 不适用02 - Go 基本类型教程 阅读教程 TutorialEdge/go-basic-types-tutorial 不适用03 - Go 复合类型教程 阅读教程 TutorialEdge/go-complex-types-tutorial 不适用04 - Go 函数教程 阅读教程 TutorialEdge/go-functions-tutorial 2019 年 3 月 27 日

    基于JAVA+SpringBoot+Vue+MySQL的敬老院管理系统 源码+数据库(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

    基于LSB实现对水印图片,文字等信息的隐藏隐写和提取的DEMO源码(功能包括嵌入水印,提取水印等).zip

    本资源是一个基于LSB(最低有效位)算法实现的水印图片和文字信息隐藏与提取的DEMO源码。该源码展示了如何将水印图片或文字信息嵌入到宿主图像中,以及如何从宿主图像中提取出隐藏的信息。功能包括嵌入水印和提取水印等操作。通过使用LSB算法,该源码实现了对水印图片和文字信息的隐写和提取。LSB算法是一种常用的图像处理技术,通过修改图像的最低有效位来嵌入额外的信息。在嵌入过程中,源码将水印图片或文字信息转换为二进制数据,并将其嵌入到宿主图像的像素值中。在提取过程中,源码从宿主图像中读取嵌入的二进制数据,并将其转换回原始的水印图片或文字信息。本资源适用于学习和研究图像隐写术的相关领域。通过阅读和运行该源码,用户可以了解LSB算法的原理和应用,掌握如何在图像中隐藏和提取水印图片和文字信息的方法。请注意,本资源仅供学习使用,不得用于任何非法用途。

    毕设&课程作业_基于C#的和SQLServer2014的学生成绩管理系统 .zip

    计算机系毕业设计

    基于Flask,mysql slope one的图书推荐系统全部资料+详细文档.zip

    【资源说明】 基于Flask,mysql slope one的图书推荐系统全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    【java毕业设计】中小企业人力资源管理系统的设计及实现源码(ssm+jsp+mysql+说明文档+LW).zip

    员工信息管理: 添加员工:录入新员工的信息到系统。 修改员工:对现有员工信息进行更新和修改。 考勤管理: 上班打卡:记录员工上班的考勤信息。 下班打卡:记录员工下班的考勤信息。 考勤查看:查看员工的考勤记录。 奖惩管理: 添加奖惩:记录员工的奖励或惩罚信息。 修改奖惩:对奖惩记录进行修改。 删除奖惩记录:从系统中移除奖惩记录。 绩效管理: 添加绩效:录入员工的绩效评估信息。 修改绩效:对绩效评估信息进行修改。 删除绩效:删除绩效评估信息。 离职退休费用: 添加费用:录入与离职或退休相关的费用信息。 修改费用:对费用信息进行修改。 删除费用:移除费用信息。 培训管理: 添加培训:录入新的培训计划或课程。 修改培训:对培训计划或课程进行修改。 删除培训:从系统中移除培训计划或课程。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

    毕设&课程作业_基于C#的会员管理系统.zip

    计算机系毕业设计

    redis键值数据库源码分析.zip

    redis键值数据库源码分析Redis 代码redis键值数据库源码分析test:(测试)memtest.c 内存检测redis_benchmark.c用于redis性能测试的实现。redis_check_aof.c 用于更新日志检查的实现。redis_check_dump.c 用于本地数据库检查的实现。testhelp.c 一个C风格的小型测试框架。struct:(结构体)adlist.c用于对列表的定义,它是一个端点链表结构dict.c主要用于内存中的hash进行管理sds.c 用于对字符串的定义Sparkline.c 一个拥有样本列表的序列t_hash.c hash在Server/Client中的自定义操作。主要通过redisObject进行类型转换。t_list.c list在Server/Client中的应答操作。主要通过redisObject进行类型转换。t_set.c set在Server/Client中的应答操作。主要通过redisObject进行类型转换。t_string.c string在Server/Client中的应答操作。主要

    基于FLASK+VUE+MINTUI公众号自动回复+看图说话+ 微信支付+H5商城全部资料+详细文档.zip

    【资源说明】 基于FLASK+VUE+MINTUI公众号自动回复+看图说话+ 微信支付+H5商城全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics