python自动寻路模板_Python实现的简单模板引擎功能示例

本文实例讲述了Python实现的简单模板引擎功能。分享给大家供大家参考,具体如下:

#coding:utf- 8

__author__="sdm"

__author_email='sdmzhu3@gmail.com'

__date__ ="$2009-8-25 21:04:13$"

'' '

pytpl 类似 php的模板类

'' '

import sys

import StringIO

import os.path

import os

#模 板的缓存

_tpl_cache={}

class Pytpl:

def __init__(self,tpl_path='./' ):

self.tpl_path=tpl_path

self.data={}

self.output = StringIO.StringIO()

pass

def set(self,name,value):

'' '

设 置模板变量

'' '

self.data[name]=value;

pass

def get(self,name):

'' '

得 到模板变量

'' '

t={}

return t.get(name, '' )

pass

def tpl(self,tplname):

'' '

渲 染模板

'' '

f=self.tpl_path+tplname

if not os.path.exists(f):

raise Exception('tpl:[%s] is not exists' % f)

mtime=os.stat(f).st_mtime

if not _tpl_cache.has_key(f) or _tpl_cache[f][ 'time' ]

src_code=self.__compile__(open(f).read())

try :

t=open(f+'.py' , 'w' )

t.write(src_code)

t.close()

except:

pass

py_code=compile(src_code, f+'.py' , 'exec' )

_tpl_cache[f]={'code' :py_code, 'time' :mtime}

else :

py_code= _tpl_cache[f]['code' ]

exec(py_code, {'self' :self}, self.data)

return self.output.getvalue()

def execute(self,code,data,tplname):

'' '

执 行这个模板

'' '

py_file_name=tplname+'.py'

f=open(py_file_name,'w' )

f.write(code)

f.close()

execfile(py_file_name, {'self' :self}, data)

def __compile__ (self,code):

'' '

编 译模板

查找 <?标记

'' '

tlen=len(code);

flag_start=''

flag_end='?>'

# 默认普通标记

status=0

i=0

#分块 标记

pos_end=0

pos_start=0

#缩 进

global indent

indent=0

py_code=[]

def place_t_code(c,t_indent):

'' '

基 本的代码处理

'' '

global indent

if (c[ 0 ]== '=' ):

return ( ' ' * 4 *indent) + 'echo ( /'%s/' % (' +c[ 1 :]+ '))'

lines=c.split("/n" )

t=[]

for i in lines:

indent2=indent

tmp=i.strip(" /n/r" )

c=tmp[len(tmp)-1 :len(tmp)]

# 判定最后一个字符

if (c== '{' ):

indent+=1

tmp=tmp[0 :len(tmp)- 1 ]+ ":"

elif(c=='}' ):

indent-=1

tmp=tmp[0 :len(tmp)- 1 ]

t.append((' ' * 4 *indent2) +tmp )

return "/n" .join(t)

while 1 :

if i>=tlen: break

c=code[i];

if status== 0 :

# 编译加速

pos_start=code.find(flag_start,pos_end);

if (pos_start>- 1 ):

s=code[pos_end:pos_start]

t_code= 'echo ( ' +repr(s)+ ')'

t_code=' ' *indent* 4 +t_code

if s:

py_code.append(t_code)

i=pos_start

last_pos=i

# 进入代码状态

status=1

continue

else :

# 没有没有找到

pos_start=tlen

t_code='echo ( ' +repr(code[pos_end:pos_start])+ ' ) '

t_code=' ' *indent* 4 +t_code

py_code.append(t_code)

break

if status== 1 :

# 查找结束标记

pos_end=code.find(flag_end,i)

if (pos_end>- 1 ):

# 需要跳过 这个标记

t_code=place_t_code(code[pos_start+2 :pos_end],indent)

# 跳过?>结束标记

pos_end+=2

py_code.append(t_code)

else :

# 没查找到直接结束

pos_end=tlen

# 需要跳过 这个标记

t_code=place_t_code(code[pos_start+2 :pos_end],indent)

py_code.append(t_code)

break

status=0

i=pos_end

pass

i+=1

py_code_str="#coding:utf-8/nimport sys;global echo;echo=self.output.write/n"

py_code_str+="/n" .join(py_code)

py_code_str=py_code_str.replace("/t" , " " )

return py_code_str

def test():

tpl=Pytpl('./' );

tpl.set('title' , '标题3' )

print tpl.tpl('test.html' )

pass

if __name__ == "__main__" :

test()

希望本文所述对大家Python程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

梦幻群侠传5帮派修炼_梦幻西游:2020年十大更新回顾 法连不秒空和连续战斗修复...

今年梦幻西游有过很多重大的维护更新&#xff0c;其中不少更新都对玩家产生中重大的影响&#xff0c;比如说法术连击第二下不会秒空气&#xff0c;以及副本的迭代等等&#xff0c;今天就来盘点下2020年梦幻西游的十大更新!一、各类副本优化迭代今年优化了多个副本&#xff0c;如…

jq ajax提交评论,织梦评论怎么改成自己的jq ajax评论

如何把织梦评论框改成自己的1、首先我们先获取织梦评论吧&#xff01;这个比较简单&#xff0c;打开/plus/feedback_ajax.php文件&#xff0c;我们找到这第36行左右代码&#xff0c;看下面/*----------------------获得指定页的评论内容function getlist(){ }-----------------…

前端图片上坐标连线_前端图形学(十三)——弹跳运动的深入之傲娇的小球

欢迎来到【畅哥聊技术】前端图形学相关技术文章&#xff0c;更多精彩内容持续更新中,敬请关注。前面我们说到了小球的弹跳运动&#xff0c;通过一个方向的加速度和摩擦力去影响小球的动画&#xff0c;其目标点也是一个固定不变的&#xff0c;似乎有些单调。那么我们今天继续小球…

python通过内置函数测试对象类型_Python的内置函数

函数名功能描述示例abs()返回数字的绝对值abs(-45)divmod()把除数和余数运算结合起来&#xff0c;返回一个包含商和余数的元组divmod(7,2) 返回&#xff1a;(3,1)raw_input()获取控制台输入&#xff0c;将所有输入看作字符串&#xff0c;返回字符串类型araw_input("input&…

服务器微信了早上好,微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短...

原标题&#xff1a;微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短嘀嘀嘀嘀&#xff0c;我的短信到啦。用关心方式&#xff0c;要你多注意休息&#xff1b;用体贴方式&#xff0c;要你轻松而快乐&#xff1b;用祝福方式&#xff0c;要你一切都过的好&#xff…

c语言调用createthread线程的头文件_易语言API多线程总汇

【thread】 即&#xff0c;线程&#xff0c;是进程中某一顺序的控制流&#xff0c;在单个程序中同时运行多个线程完成不同工作&#xff0c;称为多线程。易语言多线程理解&#xff1a;进程是一个可执行程序&#xff0c;由私有虚拟地址空间、代码、数据和其它操作系统资源组成&am…

oracle varchar默认长度_面试官:如何精确计算mysql数据库索引长度?

概述我们知道MySQL Innodb 对于索引长度的限制为 767 字节&#xff0c;并且UTF8mb4字符集是4字节字符集&#xff0c;则 767字节 / 4字节每字符 191字符(默认索引最大长度)&#xff0c;所以在varchar(255)或char(255) 类型字段上创建索引会失败&#xff0c;提示最大索引长度为7…

服务器能像客户端发信息吗,服务器怎么向客户端发信息吗

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情Linux云服…

android things 系统镜像文件_开始菜单搬家!Win 10X 系统 UI 全部重做,明年初就能用上...

不知道老伙计们还记不记得&#xff0c;小淙曾经报道过三次&#xff0c;关于微软新系统 Windows 10X 的消息。当时很多老伙计感觉太遥远&#xff0c;或者觉得它难以激起波澜。但现在看来微软布局已久&#xff0c;是铁了心要搞新系统了。因为 Windows 10X 系统已经准备好交付&…

通达信公式大全_通达信MACD金叉的选股公式大全

公式来源于网络&#xff0c;我只是用其中一个&#xff0c;一起复制来了&#xff0c;有需要的自取吧。1、0轴上方第一次金叉选股公式&#xff1a;DIFF:EMA(CLOSE,12) - EMA(CLOSE,26);DEA : EMA(DIFF,9);MACD : 2*(DIFF-DEA);xg:cross(diff,dea) and dea>-1.0 and dea<0.5…

mysql 时间差_后端从mysql取值返回0时区时间数据的问题

近日搞一个B/S项目&#xff0c;前端页面时间字段总是显示格林威冶时间&#xff0c;也就是0时区的时间&#xff0c;比北京时间差了8个小时。打开后台的数据库&#xff0c;在workbench中查询&#xff0c;结果显示的时间格式正常&#xff0c;为当前北京时间。该时间字段是在往数据…

python接口自动化关联参数_python接口自动化7-参数关联

前言我们用自动化发帖之后&#xff0c;要想接着对这篇帖子操作&#xff0c;那就需要用参数关联了&#xff0c;发帖之后会有一个帖子的id&#xff0c;获取到这个id&#xff0c;继续操作传这个帖子id就可以了(博客园的登录机制已经变了&#xff0c;不能用账号和密码登录了&#x…

abap视图字段限制_【第八章】视图

上一级目录&#xff1a;Mosh_完全掌握SQL课程_学习笔记 其它相关&#xff1a;数据概要【第八章】视图Views (时长18分钟)1. 创建视图Creating Views (5:36)小结就是创建虚拟表&#xff0c;自动化一些重复性的查询模块&#xff0c;简化各种复杂操作&#xff08;包括复杂的子查询…

生活质量衡量系统_数据质量与数据质量八个维度指标

数据质量与数据质量八个维度指标数据的质量直接影响着数据的价值&#xff0c;并且直接影响着数据分析的结果以及我们以此做出的决策的质量。质量不高的数据不仅仅是数据本身的问题&#xff0c;还会影响着企业经营管理决策&#xff1b;错误的数据还不如没有数据&#xff0c;因为…

linux的内置的账户_6 款面向 Linux 用户的开源绘图应用程序

既然你是一名 Linux 用户&#xff0c;为什么不关注一下开源绘图应用程序呢&#xff1f;-- Ankush Das(作者)小时候&#xff0c;当我开始使用计算机(在 Windows XP 中)时&#xff0c;我最喜欢的应用程序是微软的“画图”。我能在它上面涂鸦数个小时。出乎意料&#xff0c;孩子们…

有没有必要买python课_请问自学 Python 有必要买课程吗?

既然说到了找工作&#xff0c;那肯定是要去培训班的。网上优质、实用的免费课程有很多&#xff0c;但都是基础教程&#xff0c;真正能找到Python正式程序员水平的课程&#xff0c;根本没有&#xff01;那些高赞回答中的教程中高阶部分&#xff0c;也是收费教程&#xff01;或者…

kalilinux安装qt_Kali Linux 安装和搜狗输入法的安装

花了两天时间将开发环境换到Linux系统上&#xff0c;又因为自己对渗透测试也有着兴趣&#xff0c;所以就选择了Kali安装了MacOS风格的主题和图标将这两天遇到的坑写一下&#xff0c;重点有三个&#xff1a;1)kali linux系统安装2)Kali Linux中文输入法的安装(搜狗输入法)1.Kali…

python数据库自动重连_python mysql断开重连的实现方法

后台服务在运行时发现一个问题&#xff0c;运行约15分钟后&#xff0c;接口请求报错pymysql.err.InterfaceError: (0, )这个错误提示一般发生在将None赋给多个值&#xff0c;定位问题时发现pymysql.err.OperationalError: (2013, Lost connection to MySQL server during query…

ieda ts文件报错_使用TS开发微信小程序(1):环境搭建——VSCode+TS

前言现在接到小程序需要改版的需求&#xff0c;由于使用Ionic的经验&#xff0c;希望以后能够统一开发语言降低开发成本&#xff0c;所以想使用TypeScript进行开发。开发前准备工作先是看官网&#xff0c;在微信小程序的官方开发文档中找到TypeScript相关的支持介绍。微信官网描…

python tk下拉列表_如何从Tkinter中的列表创建下拉菜单?

要创建“下拉菜单”&#xff0c;可以在tkinter中使用OptionMenu基本OptionMenu示例&#xff1a;from Tkinter import *master Tk()variable StringVar(master)variable.set("one") # default valuew OptionMenu(master, variable, "one", "two&quo…