CN109669678A - 模板引擎整合方法、装置、电子设备及存储介质 - Google Patents
模板引擎整合方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109669678A CN109669678A CN201811253233.7A CN201811253233A CN109669678A CN 109669678 A CN109669678 A CN 109669678A CN 201811253233 A CN201811253233 A CN 201811253233A CN 109669678 A CN109669678 A CN 109669678A
- Authority
- CN
- China
- Prior art keywords
- template
- jinja2
- template engine
- function
- engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 85
- 230000010354 integration Effects 0.000 title claims abstract description 32
- 230000006870 function Effects 0.000 claims description 77
- 230000008676 import Effects 0.000 claims description 21
- 238000009877 rendering Methods 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 19
- 238000012545 processing Methods 0.000 claims description 17
- 230000007613 environmental effect Effects 0.000 claims description 4
- 238000001914 filtration Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 9
- 230000006399 behavior Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 241000208340 Araliaceae Species 0.000 description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000009415 formwork Methods 0.000 description 2
- 235000008434 ginseng Nutrition 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
Abstract
一种模板引擎整合方法,所述方法通过导入tornado框架和jinja2模板引擎;定义一个继承自tornado.web.RequestHandler的基类BaseHandler;在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数;及当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的模板渲染页面。本发明还提供一种模板引擎整合装置、电子设备及存储介质,所述模板引擎整合装置实现了开发辅助工具的功能。
Description
技术领域
本发明涉及自动化测试领域,具体涉及一种模板引擎整合方法、装置、电子设备及存储介质。
背景技术
Tornado全称为Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,Facebook收购以后框架以开源软件形式开放给大众。Tornado框架是一款相较于其他web framework处理服务器性能问题更加强健的轻量级的强大的Python web框架。Tornado框架是一个可定制的非阻塞式异步加载框架,速度相当快。得利于其非阻塞的方式和对epoll的运用,Tornado框架每秒可以处理数以千计的连接,因此Tornado框架是实时Web服务的一个理想框架。Tornado框架默认有一个模板引擎但是功能简单,且使用起来颇为麻烦。Tornado中的模板语言和Django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。Jinja2是人气Web框架Flask中的内置模板引擎,而且与Django的模板引擎比较类似。
发明内容
鉴于以上内容,有必要提出一种模板引擎整合方法、装置、电子设备及存储介质,能够实现让tornado框架完美支持jinja2模板引擎。
本发明的第一方面提供一种模板引擎整合方法,应用于电子设备中,所述方法包括:
导入tornado框架和jinja2模板引擎;
定义一个继承自tornado.web.RequestHandler的基类BaseHandler;
在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数;及
当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的模板渲染页面。
优选地,所述方法在导入tornado框架和jinja2模板引擎后,还包括设置模板路径的步骤。
优选地,在定义一个继承自tornado.web.RequestHandler的基类BaseHandler后,所述方法还包括:
在所述基类BaseHandler中覆盖共用的方法;
当接收到业务逻辑处理请求时,根据所述业务逻辑处理请求继承所述基类BaseHandler。
优选地,所述当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的所述jinja2的模板渲染页面包括:
配置jinja2模板文件搜索路径;
创建环境变量;及
加载所述jinja2模板引擎中的模板,渲染数据。
优选地,所述方法还包括:
通过过滤器对加载的所述jinja2模板引擎中的模板中传入的变量进行处理,其中所述过滤器为所述jinja2模板引擎自带的过滤器。
优选地,所述方法还包括:
设置所述过滤器的数量实现多级过滤。
优选地,所述方法还包括:
自定义所述过滤器,其中,通过注册的方式和装饰器的方式自定义所述过滤器。
本发明的第二方面提供一种控件属性分析装置,所述装置包括:
导入模块,用于导入tornado框架和jinja2模板引擎;
第一定义模块,用于定义一个继承自tornado.web.RequestHandler的基类BaseHandler;
第二定义模块,用于在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数;及
渲染模块,用于当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的模板渲染页面。
本发明的第三方面提供一种电子设备,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述模板引擎整合方法。
本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述模板引擎整合方法。
本发明所述的模板引擎整合方法、装置、电子设备及存储介质,所述方法通过在系统中导入tornado和jinja2,定义一个继承自tornado.web.RequestHandler的基类BaseHandler,在所述基类中定义函数render_template,并在系统在调用render_template时,加载jinja2的模板,并用所述jinja2的模板渲染页面。可以实现让tornado完美支持jinja2模板引擎,使用所述jinja2模板引擎作为Python前端web开发的模板引擎,从而复用jinja2主流模板引擎开发技术和各种功能,极大提升了使用python来开发web项目的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例一提供的模板引擎整合方法的流程图。
图2是本发明实施例二提供的模板引擎整合装置的功能模块图。
图3是本发明实施例三提供的电子设备的示意图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例的模板引擎整合方法应用在电子设备中。所述对于需要进行模板引擎整合的电子设备,可以直接在电子设备上集成本发明的方法所提供的整合功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以以软件开发工具包(Software Development Kit,SDK)的形式运行在服务器等设备上,以SDK的形式提供整合功能的接口,电子设备或其他设备通过提供的接口即可实现模板引擎整合功能。
实施例一
图1是本发明实施例一提供的模板引擎整合方法的流程图。根据不同的需求,所述流程图中的执行顺序可以改变,某些步骤可以省略。
步骤S01,导入tornado框架和jinja2模板引擎。
所述Tornao框架中的模板语言和Jinja2模板引擎中的模板语言类似。现有技术中,Tornao中的模板引擎将自带的模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。
所述Tornado框架的模板支持“控制语句”和“表达语句”,控制语句是使用{%和%}包起来的,例如{%if len(items)>2%}。表达语句是使用{{和}}包起来的,例如{{items[0]}}。所述控制语句和对应的Python语句的格式基本完全相同,支持if、for、while和try语句,上述语句逻辑结束的位置需要用{%end%}做标记。所述Tornado框架中的模板语言还可以通过extends和block语句实现了模板继承。
在本实施方式中,可以通过以下代码实现导入tornado和jinja2:
#导入Jinja2
from jinja2import Environment,FileSystemLoader
#导入Tornado
import tornado.ioloop
import tornado.web
在本实施方式中,所述模板引擎整合方法在导入tornado框架和jinja2模板引擎后,还包括设置模板路径的步骤。例如,导入tornado框架和jinja2模板引擎后及使用所述模板前需要在设置(setting)中设置模板路径:"template_path":"tpl"。
步骤S02,定义一个继承自tornado.web.RequestHandler的基类BaseHandler。
RequestHandler可以借鉴C/S(客户端/服务器)的工作原理来理解,C/S(客户端/服务器)的工作原理是服务器被动地捕获(监听)客户端的信息,并对客户端发送来的请求选择性地完成某项行为并反馈给客户。我们通常使用的网页基本就是基于这一原理的。比如用户在网页上点击一按钮,那么就会有一条“某某按钮被按下”的请求发送给当前网页的后台服务器。服务器收到这条请求后,可能返回一条“刷新”的指令到用户所使用的客户端的浏览器,那么所述浏览器作为客户端收到这条指令便执行刷新行为,于是一个C/S过程就完成了。
RequestHandler顾名思义就是服务器处理客户端请求的一个类,它的主要任务就是接受上述如“某某按钮被按下”的请求,并返回“刷新”指令。
大多数Tornado网页应用的具体行为都是在继承了RequestHandler的子类里完成的。handler子类可以利用get(),post()等方法处理接受到的各种各样的网页请求(request),而每一个handler可以定义多个get(),post()等方法。通常这些方法都有一个参数self,代表自身的RequestHandler对象。
在handler内,可以利用self调用函数执行一些行为,例如所述函数可以是:
self.render(...)(RequestHandler.render(...)),
或者self.write(...)(RequestHandler.write(...))。
render通过名字加载一个模板(template),可以是html等文件。write是基于非模板类的输出,它接受字符串(strings)、字节(bytes)和字典(dictionaries)作为输出。
在本实施方式中,所述模板引擎整合方法还包括:
在定义一个继承自RequestHandler的基类BaseHandler后,在所述基类BaseHandler中覆盖共用的方法;
当接收到业务逻辑处理申请时,根据所述业务逻辑处理申请继承所述基类BaseHandler。
具体地,定义一个继承自RequestHandler的基类BaseHandler,然后在BaseHandler里覆盖write_error,get_current_user这些公用的方法,然后实际的业务逻辑处理类再继承这个BaseHandler类。
步骤S03,在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数。
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。可以使用render_template()方法来渲染模板。所述render_template()的功能是先引入index.html,同时根据后面传入的参数,对html进行修改渲染。所述render_template()不仅能渲染静态的html文件,也能传递参数给html,使一个html模板根据参数的不同显示不同的内容。
步骤S04,在系统在调用所述render_template模板函数时,加载jinja2的模板引擎中的模板并通过加载的模板渲染页面。
所述jinja2模板引擎在使用模板时,可以在render_template参数中以key=value形式传入变量,在html中使用{{key}}来显示传入的变量,从而实现重写ReaquestHandle的render的方法来渲染页面。
在本实施方式中,所述步骤在系统在调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并用加载的模板渲染页面具体包括:
(1)配置jinja2模板文件搜索路径;
TemplateLoader=jinja2.FileSystemLoader(searchpath=’/xxx’)
(2)创建环境变量;
TemplateEnv=jinja2.Environment(loader=TemplateLoader)
(3)加载所述jinja2模板引擎中的模板,渲染数据;
template=TemplateEnv.get_template(template_name)
html=template.render(**kw)
举例而言,在配置好文件搜索路径后,通过env=Environment(loader=FileSystemLoader(‘templates’))创建一个Environment对象,通过template=env.get_template(‘mytemplate.txt’),使用env的模板环境加载名为mytemplate.txt的模板文件,在通过template.render(name=‘Jack’),可以渲染模板template,同时传入了模板参数name值为Jack。在本实施例中,创建一个template Environment对象时使用的加载器loader是FileSystemLoader类型,可以加载的模板是当前工作目录下的templates目录下的模板文件。
在本实施方式中,所述模板引擎整合方法还包括:
通过过滤器对模板中传入的变量进行处理。
具体地,所述过滤器可以在html中对传入的变量进行处理,所述过滤器的使用方式为:变量名|过滤器。过滤器名写在变量名后面,中间用|分隔,如{{variable|filter_name(*args)}}。例如将没有过滤器的语句<h1>{{contents}}</h1>修改为<h1>{{contents|upper}}</h1>,所述过滤器其实就是以变量为参数的函数,返回处理后的结果。
另外,还可以在后端先用字符串对象的upper()函数处理好所述变量,再将处理后的变量传递至模板,其效果是完全一样的。所述jinja2模板自带了一些过滤器,常用的过滤器包括safe、capitalize、lower、title、trim和striptags等。
所述safe过滤器表示渲染时不转义;
所述capitalize过滤器表示值的首字母转换为大写,其他字母小写;
所述lower过滤器表示值转换为小写形式;
所述upper过滤器表示值转换为大写形式;
所述title过滤器表示值中的每个单词的首字母转换为大写;
所述trim过滤器表示值的首尾空格去掉;
所述striptags过滤器表示渲染之前把值中所有的HTML标签删掉。
在本实施方式中,还可以自己按照需求设置所述过滤器的数量,例如,通过所述jinja2模板支持的{{变量|过滤器1|过滤器2|...}}实现多级过滤的目的。
优选地,所述模板引擎整合方法还包括自定义过滤器的步骤。所述过滤器本质上就是一个函数。如果在模版中调用所述过滤器,那么就会将变量的值作为第一个参数传给过滤器这个函数,然后函数的返回值会作为所述过滤器的返回值。当模板内置的过滤器不能满足需求,可以自定义所述过滤器。自定义过滤器有两种实现方式:一种是通过注册的方式实现自定义过滤器,如调用应用程序实例的add_template_filter,所述方法的第一个参数是函数名,第二个参数是自定义的过滤器的名称;另一种是通过装饰器来实现自定义过滤器,所述装饰器传入的参数是自定义的过滤器名称。
需要说明的是,自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。
综上所述,本发明提供的模板引擎整合方法,包括导入tornado框架和jinja2模板引擎;定义一个继承自tornado.web.RequestHandler的基类BaseHandler;在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数和render_html函数;及在系统在调用所述render_html函数时,加载jinja2的模板,并通过加载的所述jinja2的模板渲染页面。
所述方法通过导入tornado和jinja2,定义一个继承自tornado.web.RequestHandler的基类BaseHandler,在所述基类中定义两个函数render_template和render_html,从而当系统调用render_html时,加载jinja2的模板,并用所述jinja2的模板渲染页面。实现了让tornado完美支持jinja2模板引擎,使用所述jinja2模板引擎作为Python前端web开发的模板引擎,从而复用jinja2主流模板引擎开发技术和各种功能,极大提升了使用python来开发web项目的效率。
以上所述,仅是本发明的具体实施方式,但本发明的保护范围并不局限于此,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。
下面结合第2至3图,分别对实现上述模板引擎整合方法的电子设备的功能模块及硬件结构进行介绍。
实施例二
图2为本发明模板引擎整合装置较佳实施例中的功能模块图。
在一些实施例中,所述控件属性模板引擎整合装置20运行于电子设备中。所述模板引擎整合装置20可以包括多个由程序代码段所组成的功能模块。所述模板引擎整合装置20中的各个程序段的程序代码可以存储于存储器中,并由至少一个处理器所执行,以执行(详见图1及其相关描述)模板引擎整合功能。
本实施例中,所述模板引擎整合装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:导入模块201、第一定义模块202、第二定义模块203及渲染模块204。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在一些实施例中,关于各模块的功能将在后续的实施例中详述。
所述导入模块201用于导入tornado框架和jinja2模板引擎。
所述Tornao框架中的模板语言和Jinja2模板引擎中的模板语言类似。现有技术中,Tornao中的模板引擎将自带的模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。
所述Tornado框架的模板支持“控制语句”和“表达语句”,控制语句是使用{%和%}包起来的,例如{%if len(items)>2%}。表达语句是使用{{和}}包起来的,例如{{items[0]}}。所述控制语句和对应的Python语句的格式基本完全相同,支持if、for、while和try语句,上述语句逻辑结束的位置需要用{%end%}做标记。所述Tornado框架中的模板语言还可以通过extends和block语句实现了模板继承。
在本实施方式中,可以通过以下代码实现导入tornado和jinja2:
#导入Jinja2
from jinja2 import Environment,FileSystemLoader
#导入Tornado
import tornado.ioloop
import tornado.web
在本实施方式中,所述模板引擎整合方法在导入tornado框架和jinja2模板引擎后,还包括设置模板路径的步骤。例如,导入tornado框架和jinja2模板引擎后及使用所述模板前需要在设置(setting)中设置模板路径:"template_path":"tpl"。
所述第一定义模块202用于定义一个继承自tornado.web.RequestHandler的基类BaseHandler。
RequestHandler可以借鉴C/S(客户端/服务器)的工作原理来理解,C/S(客户端/服务器)的工作原理是服务器被动地捕获(监听)客户端的信息,并对客户端发送来的请求选择性地完成某项行为并反馈给客户。我们通常使用的网页基本就是基于这一原理的。比如用户在网页上点击一按钮,那么就会有一条“某某按钮被按下”的请求发送给当前网页的后台服务器。服务器收到这条请求后,可能返回一条“刷新”的指令到用户所使用的客户端的浏览器,那么所述浏览器作为客户端收到这条指令便执行刷新行为,于是一个C/S过程就完成了。
RequestHandler顾名思义就是服务器处理客户端请求的一个类,它的主要任务就是接受上述如“某某按钮被按下”的请求,并返回“刷新”指令。
大多数Tornado网页应用的具体行为都是在继承了RequestHandler的子类里完成的。handler子类可以利用get(),post()等方法处理接受到的各种各样的网页请求(request),而每一个handler可以定义多个get(),post()等方法。通常这些方法都有一个参数self,代表自身的RequestHandler对象。
在handler内,可以利用self调用函数执行一些行为,例如所述函数可以是:
self.render(...)(RequestHandler.render(...)),
或者self.write(...)(RequestHandler.write(...))。
render通过名字加载一个模板(template),可以是html等文件。write是基于非模板类的输出,它接受字符串(strings)、字节(bytes)和字典(dictionaries)作为输出。
在本实施方式中,所述模板引擎整合装置20还可以:
在定义一个继承自RequestHandler的基类BaseHandler后,在所述基类BaseHandler中覆盖共用的方法;
当接收到业务逻辑处理申请时,根据所述业务逻辑处理申请继承所述基类BaseHandler。
具体地,定义一个继承自RequestHandler的基类BaseHandler,然后在BaseHandler里覆盖write_error,get_current_user这些公用的方法,然后实际的业务逻辑处理类再继承这个BaseHandler类。
所述第二定义模块203用于在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数。
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。可以使用render_template()方法来渲染模板。所述render_template()的功能是先引入index.html,同时根据后面传入的参数,对html进行修改渲染。所述render_template()不仅能渲染静态的html文件,也能传递参数给html,使一个html模板根据参数的不同显示不同的内容。
所述渲染模块204用于在系统在调用所述render_template模板函数时,加载jinja2的模板引擎中的模板并通过加载的模板渲染页面。
所述jinja2模板引擎在使用模板时,可以在render_template参数中以key=value形式传入变量,在html中使用{{key}}来显示传入的变量,从而实现重写ReaquestHandle的render的方法来渲染页面。
在本实施方式中,所述步骤在系统在调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并用加载的模板渲染页面具体包括:
(1)配置jinja2模板文件搜索路径;
TemplateLoader=jinja2.FileSystemLoader(searchpath=’/xxx’)
(2)创建环境变量;
TemplateEnv=jinja2.Environment(loader=TemplateLoader)
(3)加载所述jinja2模板引擎中的模板,渲染数据;
template=TemplateEnv.get_template(template_name)
html=template.render(**kw)
举例而言,在配置好文件搜索路径后,通过env=Environment(loader=FileSystemLoader(‘templates’))创建一个Environment对象,通过template=env.get_template(‘mytemplate.txt’),使用env的模板环境加载名为mytemplate.txt的模板文件,在通过template.render(name=‘Jack’),可以渲染模板template,同时传入了模板参数name值为Jack。在本实施例中,创建一个template Environment对象时使用的加载器loader是FileSystemLoader类型,可以加载的模板是当前工作目录下的templates目录下的模板文件。
在本实施方式中,所述模板引擎整合装置20还可以:
通过过滤器对模板中传入的变量进行处理。
具体地,所述过滤器可以在html中对传入的变量进行处理,所述过滤器的使用方式为:变量名|过滤器。过滤器名写在变量名后面,中间用|分隔,如{{variable|filter_name(*args)}}。例如将没有过滤器的语句<h1>{{contents}}</h1>修改为<h1>{{contents|upper}}</h1>,所述过滤器其实就是以变量为参数的函数,返回处理后的结果。
另外,还可以在后端先用字符串对象的upper()函数处理好所述变量,再将处理后的变量传递至模板,其效果是完全一样的。所述jinja2模板自带了一些过滤器,常用的过滤器包括safe、capitalize、lower、title、trim和striptags等。
所述safe过滤器表示渲染时不转义;
所述capitalize过滤器表示值的首字母转换为大写,其他字母小写;
所述lower过滤器表示值转换为小写形式;
所述upper过滤器表示值转换为大写形式;
所述title过滤器表示值中的每个单词的首字母转换为大写;
所述trim过滤器表示值的首尾空格去掉;
所述striptags过滤器表示渲染之前把值中所有的HTML标签删掉。
在本实施方式中,还可以自己按照需求设置所述过滤器的数量,例如,通过所述jinja2模板支持的{{变量|过滤器1|过滤器2|...}}实现多级过滤的目的。
优选地,所述模板引擎整合装置20还可以自定义所述过滤器。所述过滤器本质上就是一个函数。如果在模版中调用所述过滤器,那么就会将变量的值作为第一个参数传给过滤器这个函数,然后函数的返回值会作为所述过滤器的返回值。当模板内置的过滤器不能满足需求,可以自定义所述过滤器。自定义过滤器有两种实现方式:一种是通过注册的方式实现自定义过滤器,如调用应用程序实例的add_template_filter,所述方法的第一个参数是函数名,第二个参数是自定义的过滤器的名称;另一种是通过装饰器来实现自定义过滤器,所述装饰器传入的参数是自定义的过滤器名称。
需要说明的是,自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。
综上所述,本发明所述的模板引擎整合装置20,包括导入模块201、第一定义模块202、第二定义模块203及渲染模块204。所述导入模块201用于导入tornado框架和jinja2模板引擎;所述第一定义模块202用于定义一个继承自tornado.web.RequestHandler的基类BaseHandler;所述第二定义模块203用于在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数和render_html函数;及所述渲染模块204在系统在调用所述render_html函数时,加载jinja2的模板,并通过加载的所述jinja2的模板渲染页面。从而可以实现让tornado完美支持jinja2模板引擎,使用所述jinja2模板引擎作为Python前端web开发的模板引擎,从而复用jinja2主流模板引擎开发技术和各种功能,极大提升了使用python来开发web项目的效率。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,双屏设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
图3为本发明实施例三提供的电子设备的示意图。
所述电子设备3包括:存储器31、至少一个处理器32、存储在所述存储器31中并可在所述至少一个处理器32上运行的计算机程序33及至少一条通讯总线34。
所述至少一个处理器32执行所述计算机程序33时实现上述模板引擎整合方法实施例中的步骤。
示例性的,所述计算机程序33可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述至少一个处理器32执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,所述指令段用于描述所述计算机程序33在所述电子设备3中的执行过程。
所述电子设备3可以是手机、平板电脑、个人数字助理(Personal DigitalAssistant,PDA)等安装有应用程序的设备。本领域技术人员可以理解,所述示意图3仅仅是电子设备3的示例,并不构成对电子设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备3还可以包括输入输出设备、网络接入设备、总线等。
所述至少一个处理器32可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。所述处理器32可以是微处理器或者所述处理器32也可以是任何常规的处理器等,所述处理器32是所述电子设备3的控制中心,利用各种接口和线路连接整个电子设备3的各个部分。
所述存储器31可用于存储所述计算机程序33和/或模块/单元,所述处理器32通过运行或执行存储在所述存储器31内的计算机程序和/或模块/单元,以及调用存储在存储器31内的数据,实现所述电子设备3的各种功能。所述存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备3的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器31可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述电子设备3集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,所述计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
在本发明所提供的几个实施例中,应所述理解到,所揭露的电子设备和方法,可以通过其它的方式实现。例如,以上所描述的电子设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能单元可以集成在相同处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在相同单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神范围。
Claims (10)
1.一种模板引擎整合方法,应用于电子设备中,其特征在于,所述方法包括:
导入tornado框架和jinja2模板引擎;
定义一个继承自tornado.web.RequestHandler的基类BaseHandler;
在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数;及
当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的模板渲染页面。
2.如权利要求1所述的模板引擎整合方法,其特征在于,所述方法在导入tornado框架和jinja2模板引擎后,还包括设置模板路径的步骤。
3.如权利要求2所述的模板引擎整合方法,其特征在于,在定义一个继承自tornado.web.RequestHandler的基类BaseHandler后,所述方法还包括:
在所述基类BaseHandler中覆盖共用的方法;
当接收到业务逻辑处理请求时,根据所述业务逻辑处理请求继承所述基类BaseHandler。
4.如权利要求1所述的模板引擎整合方法,其特征在于,所述当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的所述jinja2的模板渲染页面包括:
配置jinja2模板文件搜索路径;
创建环境变量;及
加载所述jinja2模板引擎中的模板,渲染数据。
5.如权利要求4所述的模板引擎整合方法,其特征在于,所述方法还包括:
通过过滤器对加载的所述jinja2模板引擎中的模板中传入的变量进行处理,其中所述过滤器为所述jinja2模板引擎自带的过滤器。
6.如权利要求5所述的模板引擎整合方法,其特征在于,所述方法还包括:
设置所述过滤器的数量实现多级过滤。
7.如权利要求6所述的模板引擎整合方法,其特征在于,所述方法还包括:
自定义所述过滤器,其中,通过注册的方式和装饰器的方式自定义所述过滤器。
8.一种控件属性分析装置,其特征在于,所述装置包括:
导入模块,用于导入tornado框架和jinja2模板引擎;
第一定义模块,用于定义一个继承自tornado.web.RequestHandler的基类BaseHandler;
第二定义模块,用于在所述基类BaseHandler中定义函数,其中,所述函数包括render_template模板函数;及
渲染模块,用于当系统调用所述render_template模板函数时,加载jinja2模板引擎中的模板,并通过加载的模板渲染页面。
9.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现如权利要求1至7中任意一项所述的模板引擎整合方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的模板引擎整合方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811253233.7A CN109669678A (zh) | 2018-10-25 | 2018-10-25 | 模板引擎整合方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811253233.7A CN109669678A (zh) | 2018-10-25 | 2018-10-25 | 模板引擎整合方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109669678A true CN109669678A (zh) | 2019-04-23 |
Family
ID=66142548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811253233.7A Pending CN109669678A (zh) | 2018-10-25 | 2018-10-25 | 模板引擎整合方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109669678A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111752534A (zh) * | 2020-06-22 | 2020-10-09 | 北京百度网讯科技有限公司 | 多领域定制项目模板引擎、由其执行的方法、设备和介质 |
CN112734571A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市富途网络科技有限公司 | 复盘模板生成笔记的方法及相关产品 |
CN117389541A (zh) * | 2023-12-13 | 2024-01-12 | 中国人民解放军国防科技大学 | 基于对话检索生成模板的配置系统及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503111A (zh) * | 2016-10-18 | 2017-03-15 | 广州市动景计算机科技有限公司 | 网页转码方法、装置及客户终端 |
-
2018
- 2018-10-25 CN CN201811253233.7A patent/CN109669678A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106503111A (zh) * | 2016-10-18 | 2017-03-15 | 广州市动景计算机科技有限公司 | 网页转码方法、装置及客户终端 |
Non-Patent Citations (1)
Title |
---|
HQZXSC2006: "为tornado框架支持jinja2", 《HTTPS://BLOG.CSDN.NET/HQZXSC2006/ARTICLE/DETAILS/72831542》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111752534A (zh) * | 2020-06-22 | 2020-10-09 | 北京百度网讯科技有限公司 | 多领域定制项目模板引擎、由其执行的方法、设备和介质 |
CN111752534B (zh) * | 2020-06-22 | 2024-01-12 | 北京百度网讯科技有限公司 | 多领域定制项目模板引擎、由其执行的方法、设备和介质 |
CN112734571A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市富途网络科技有限公司 | 复盘模板生成笔记的方法及相关产品 |
CN112734571B (zh) * | 2020-12-30 | 2023-12-19 | 深圳市富途网络科技有限公司 | 复盘模板生成笔记的方法及相关产品 |
CN117389541A (zh) * | 2023-12-13 | 2024-01-12 | 中国人民解放军国防科技大学 | 基于对话检索生成模板的配置系统及设备 |
CN117389541B (zh) * | 2023-12-13 | 2024-02-23 | 中国人民解放军国防科技大学 | 基于对话检索生成模板的配置系统及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109614102A (zh) | 代码自动生成方法、装置、电子设备及存储介质 | |
CN108495192A (zh) | 页面编辑处理方法及装置 | |
CN108156022A (zh) | 一种服务调用方法、装置及电子设备 | |
CN110019080B (zh) | 数据访问方法和装置 | |
CN110377462B (zh) | 接口测试方法、装置及终端设备 | |
CN110297999A (zh) | 一种网页模板生成方法及装置、网页加载方法及前端服务器和网站服务器 | |
CN109669678A (zh) | 模板引擎整合方法、装置、电子设备及存储介质 | |
CN113227976A (zh) | 使用表述性状态转移(rest)应用编程接口(api)进行数据转换的方法、系统和计算机可读介质 | |
CN107301137A (zh) | Rset接口实现方法和装置及电子设备和计算机可读存储介质 | |
CN111443901B (zh) | 一种基于Java反射的业务扩展方法及装置 | |
CN108171528A (zh) | 一种归因方法及归因系统 | |
CN112667415B (zh) | 数据调用方法、装置、可读存储介质及电子设备 | |
CN110795697A (zh) | 逻辑表达式的获取方法、装置、存储介质以及电子装置 | |
CN110851136A (zh) | 数据获取方法、装置、电子设备及存储介质 | |
CN106648569A (zh) | 目标序列化实现方法和装置 | |
CN113626223A (zh) | 一种接口调用方法和装置 | |
CN112631649A (zh) | 智能合约管理方法、装置、终端设备及介质 | |
CN109828759A (zh) | 代码编译方法、装置、计算机装置及存储介质 | |
CN117234582A (zh) | 一种项目代码处理方法、装置、电子设备及存储介质 | |
CN107404515A (zh) | 异步http请求的处理方法及装置 | |
CN110222286A (zh) | 信息获取方法、装置、终端和计算机可读存储介质 | |
CN110647371A (zh) | 一种基于业务配置的多语言资源文件解析方法和系统 | |
US20220284371A1 (en) | Method, device and medium for a business function page | |
CN114968917A (zh) | 一种文件数据快速导入方法及装置 | |
CN109815455A (zh) | 项目文件处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190423 |
|
RJ01 | Rejection of invention patent application after publication |