依赖MVC设计模式实现轻量级Web框架(四) : 模板支持功能的实现

模板支持是一种替换网页资源内容的一种技术。需要动态的渲染网页中的内容的时候,就需要模板支持功能的支撑。如下属代码所示,对于<h1></h1>标签中的内容,需要依据不同的请求而在网页中渲染不同的内容,就用到了模板替换的技术,如果不使用模板替换技术,那么这就是一件非常麻烦的事情,对于不同的请求,就需要编写不同的前端代码。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>TemplateReplace</title>
  </head>
  <body>
    <h1>{{ message }}</h1>
    <h1>{{ user }}</h1>
  </body>
</html>

模板替换的思想是非常简单的,只要通过正则表达式匹配到标签中的{{ }}的内容,然后利用传递进入模板的值替换之后将模板内容包装成为Response对象返回给客户端即可。

import re
import os

pattern = r"{{(.*?)}}"

def parse_templates(template_content) :
	#匹配模板中的{{ }}的内容,如果没有返回元组
	compine = re.compile(pattern)
	result = compine.findall(template_content)
	return result or tuple()

def replace_templates(path,**options) :
	#将模板中的内容,替换成传递进来的参数,将替换完之后的内容返回
	path = os.path.join('templates',path)
	if os.path.exists(path) :
		with open(path,"rb") as file :
			content = file.read().decode()
		parse_contents = parse_templates(content)
		if options :
			for parse_content in parse_contents :
				item = parse_content.strip()
				old_value = '{{{{{}}}}}'.format(parse_content)
				new_value = str(options.get(item, ''))
				content = content.replace(old_value, new_value)
	return content

测试用例:

在浏览器中输入http://127.0.0.1:8000/replace 可以看到在浏览器中看到网页渲染内容。

  1. 传递进上述模板中user = ‘JassonHandler@163.com’ message = 'Hello ,JassonHandler@163.com ’
	class TemplateReplaceHandler(BaseHandler) :
		def get(self,request,*args,**options):
			user = 'JassonHandler@163.com'
			message = 'Hello ' + user
			return simple_template('template.html',user = user,message = message)

测试反馈 :
在这里插入图片描述
2. 传递进上述模板中user = '1797309152@qq.com’message = ‘Hello ,1797309152@qq.com’

测试反馈:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值