今天放假在家,外面又在下雨,闲来无事,写了个简单的模板引擎,其实也不算什么模板,只是把嵌在html里的python代码解释成嵌入在python里的html代码,仅此而已,代码也很简陋,纯粹个人娱乐
以下是示例代码:
from web.render import SimpleHTMLRender
from socketserver import ThreadingMixIn
from wsgiref.simple_server import WSGIServer
render = SimpleHTMLRender("F:/test/")
class ThreadingWSGIServer(ThreadingMixIn,WSGIServer):
pass
def application(env,start_response):
start_response("200 OK",[("Content-Type","text/html;charset=UTF-8")])
return render.hello(name="phyeas")
if __name__=="__main__":
from wsgiref.simple_server import make_server
httpd=make_server('',8080,application,server_class=ThreadingWSGIServer)
print("Http Service on port 8080....")
httpd.handle_request()
需要在F:/test目录下放置一个叫hello.html的文件。文件内容是:
<%def render(name):%>
Hello <%=name%>!
当然了,路径和文件名可以自定
输出结果就是 Hello phyeas!(当然可以改成你的名字啦)
运行后将生成一个hello.py文件和hello.pyc文件,前面是由SimpleHTMLRender生成的,后面是导入到程序里python自动编译的结果
核心代码:
def render(self, fpath, *args, **kwargs):
if os.path.exists(fpath[0:-5]+".py") or os.path.exists(fpath[0:-5]+".pyc"):
if os.path.dirname(fpath) not in sys.path:
sys.path.append(os.path.dirname(fpath))
py_f_path=fpath[0:-5]+".py" if os.path.exists(fpath[0:-5]+".py") else fpath[0:-5]+".pyc"
create_new_file=False
if os.stat(fpath).st_mtime>os.stat(py_f_path).st_ctime:#如果html文件的修改时间大于python文件的创建时间,就重新创建
with open(fpath,encoding="UTF-8") as f:
parseHTML2Py(f)
create_new_file=True
fname=os.path.split(fpath)[1][:-5]#获取文件名
import_statement="import "+fname
if import_statement not in imports or create_new_file:#创建新文件时重新import
exec(import_statement)#导入模块
if fname+"_real_func" not in self.render_functions or create_new_file:#创建新文件时重新绑定函数
self.render_functions[fname+"_real_func"]=eval(fname+".render")#获取出函数绑定
return getattr(self,fname+"_real_func")(*args,**kwargs)
else:
with open(fpath,encoding="UTF-8") as f:
parseHTML2Py(f)
return self.render(fpath,*args,**kwargs)
分享到:
- 2009-04-06 21:14
- 浏览 1341
- 评论(2)
- 论坛回复 / 浏览 (2 / 2545)
- 查看更多
相关推荐
django> = 2.1.6,<3.0 Python 3.8版本 图书馆 -请求-请求 执行 服务器网站 iptv-python-convert \ server_web.py默认端口80 服务器API / REST iptv-python-convert \ iptv_api \ run_api.py默认端口8000
使用Python 3.0解决Leetcode问题 入门 每个文件的解决方案和输出示例都有leet代码问题 先决条件 Python 3.0 Give examples 正在安装 一系列循序渐进的示例,告诉您如何运行开发环境 说出步骤将是什么 Give the ...
用于通过不同的UI后端显示swagger文档以及使用swagger规范3.0(称为OpenAPI3)可选地验证/解析aiohttp请求的软件包。 支持的UI后端 如果仅需要验证而无法查看文档,则可以使用多个UI后端,或者可以完全禁用UI后端。 ...
需要安装Python 3.0+,您可以在找到安装程序 2)安装Python要求 在此仓库的主目录中,运行以下命令: pip install -r requirements.txt 3)配置 请按照以下说明运行Web服务器,并在服务器运行后导航至该服务器。 ...
目录安装使用Python3.7来创建虚拟环境'venv' $ virtualenv -p python3.7 venv$ source venv/bin/activate安装要求$ pip install -r requirements为了在localhost或AWS Lambda和AWS API Gateway上部署Web应用程序,请...
本动手实战项目介绍了如何在前端使用Ajax向后端请求数据并展示在Web页面,并且在Web页面提供了“增、删、查、改”的功能。 ? 一、融汇贯通 将Python语言和Django基础知识,以实际应用为媒介,有机组织、融汇贯通。让...
第一,Sixpack服务器,是负责响应Web请求。 第二,Sixpack的Web,可用于跟踪和作用于你的A / B测试的web仪表板。 Sixpack-web是可选的。要求Redis> = 2.6 Python> = 2.7(3.0未测试,欢迎拉取请求)入门要开始,请...
基于Django的简易发布会签到系统。 Django3.0发布,本项目代码与出版图书保持一致,想使用Django 3.0的请移步到: 介绍: 本项目为一书中项目代码。代码实现的一个较大的完整的发布会签到系统。 它包含功能: 完整...
是Python中的轻量级WSGI Web应用程序框架。 它旨在让您快速,轻松地入门。 是Flask之上的框架,可自动处理使用OpenAPI(以前称为Swagger)定义的HTTP请求,同时支持该规范的v2.0和v3.0。 是一个ORM / OD
django是一个基于python的开源web框架,旨在简化开发者开发过程,使得开发起来快速简洁。采用了MVT软件设计模式(Model模型、View视图、Template模板) 这里MTV模型 Template呈现给用户,用户通过Template发送请求给...
是Python中的轻量级WSGI Web应用程序框架。 它旨在让您快速,轻松地入门。 可扩展性的。 是一个ORM / ODM /与框架无关的库,用于将复杂的数据类型(例如对象)与本机Python数据类型之间进行转换。 是Flask和棉花糖...
安装Voilà可以与conda软件包管理器一起安装conda install -c conda-forge voila或从pypi pip install voilaJupyterLab预览扩展Voilà提供了JupyterLab扩展,可在侧窗格中显示笔记本的Voilà预览。 与JupyterLab 3.0...
此扩展名主要用于查看托管在可通过Web访问的版本控制系统中的文件,该系统本身不提供突出显示功能,但使用范围肯定不止于此。 现在,可以从扩展选项页面中选择各种颜色主题和默认大小。 支持的语言:Actionscript(....
这是Heatflask Web应用程序的服务器端和客户端代码存储库,当前在。执照该项目已获得GNU通用公共许可证v3.0 许可。 任何用户都可以自由地提出修改建议,派生此仓库和/或发出请求请求。 您不能随意在可以赚钱的项目...
该项目旨在提供符合 DNP3 2 级标准的实用程序,包括: - 符合 2 级 DNP3 标准的堆栈 - 基于 Web 的测试实用程序 - 用于测试网页的 Python 远程控制 到目前为止,重点一直围绕外站功能。 将来会包含主站功能。 要求...