Velocity的中文指南(4)-整理

Python异步协程爬虫优化:解决aiohttp中ServerDisconnectedError的高效策略 本文深入探讨了在Python异步协程爬虫中使用aiohttp时,如何高效解决常见的ServerDisconnectedError问题。核心策略包括全局复用ClientSession、精细配置TCPConnector连接池、实施请求重试与速率限制,从而构建稳定、高效的异步爬虫架构,有效避免服务器断开连接错误。 阅读详情

1.       宏

#macro 脚本元素允许模板设计者在VTL 模板中定义重复的段。 Velocimacros 不管是在复杂还是简单的场合都非常有用。下面这个Velocimacro,仅用来节省击键和减少排版错误,介绍了一些Velocity宏的概念。

#macro( d )

<tr><td></td></tr>

#end

 

在例子中,Velocimacro定义为d,它可以象调用其他VTL指令一样的形式来进行调用:

#d()

 

当这个模板被调用时, Velocity 将 #d() 替换为一个单行的空表格。

 

Velocimacro 可以带一些参数,也可以不带参数(如上例所示)。但在他被调用时,所带的参数必须和其定义时的参数一样。很多Velocimacros 定义为不止一个参数。下面这个宏带有两个参数,一个颜色,一个数组。

#macro( tablerows $color $somelist )

#foreach( $something in $somelist )

    <tr><td bgcolor=$color>$something</td></tr>

#end

#end

 

在这个例子中定义的Velocimacro,名为tablerows, 要求两个参数。 第一个参数代替$color, 第二个代替$somelist。

可以写进VTL 模板中的东西都可以写进Velocimacro 的主体部分。tablerows 宏其实是一个foreach 语句。在#tablerows 宏的定义中有两个#ende语句,第一个属于#foreach, 第二个结束宏定义。

#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )

#set( $color = "blue" )

<table>

    #tablerows( $color $greatlakes )

</table>

 

请注意$greatlakes 替换了$somelist。 这样,当#tablerows 宏被调用时,将产生以下输出:

<table>

    <tr><td bgcolor="blue">Superior</td></tr>

    <tr><td bgcolor="blue">Michigan</td></tr>

    <tr><td bgcolor="blue">Huron</td></tr>

    <tr><td bgcolor="blue">Erie</td></tr>

    <tr><td bgcolor="blue">Ontario</td></tr>

</table>

 

Velocimacros 在Velocity 模板语句内定义,这意味着它在同一站点内的其他Velocity 模板中并不有效。定义一个宏,并使其与其他模板共享很具有明显的优点:他减少了在大量的模板内重复定义宏的工作,并减少了出错的机会,并确保对其他宏的改变对其他所有模板有效。

但如果 #tablerows($color $list) 宏是在一个Velocimacros 模板库内定义的,它就可以被其他常规模板所用。当然,它可以用于各种目的,也可重用多次。在表示所有真菌类(fungi)的mushroom.vm 模板中,#tablerows 宏可以被用来列出典型的蘑菇。

#set( $parts = ["volva","stipe","annulus","gills","pileus"] )

#set( $cellbgcol = "#CC00FF" )

<table>

#tablerows( $cellbgcol $parts )

</table>

 

我们对mushroom.vm执行请求,Velocity 将在模板库内找到#tablerows 宏 (在velocity.properties 文件中定义)并产生以下输出:

<table>

    <tr><td bgcolor="#CC00FF">volva</td></tr>

    <tr><td bgcolor="#CC00FF">stipe</td></tr>

    <tr><td bgcolor="#CC00FF">annulus</td></tr>

    <tr><td bgcolor="#CC00FF">gills</td></tr>

    <tr><td bgcolor="#CC00FF">pileus</td></tr>

</table>

 

Velocimacro 参数

Velocimacros 的参数可以是以下的VTL元素:

引用(Reference): 以 '$' 打头的元素

字面字符串(String literal) : 比如"$foo" 或 'hello'

字面数字: 1, 2 ….

整数范围: [ 1..2] 或 [$foo .. $bar]

对象数组: [ "a", "b", "c"]

布尔真

布尔假

 

当把引用作为参数传递给Velocimacros时,请注意引用是按“名字”传递的。这意味着他们的值在每次使用他们的Velocimacro中产生。这个特性允许你在方法调用是传递引用,并在每次使用时进行方法调用。例如,Fo,当调用下面的Velocimacro 时,

#macro( callme $a )

         $a $a $a

     #end

 

     #callme( $foo.bar() )

 

结果是,在方法bar() 中,引用 $foo 被调用了3次。

咋看时,这个特征让人吃惊,当当你考虑一下Velocimacros的原本动机 – 在VTL模板中避免很多“剪切复制”操作—你就会明白。它允许你将无状态对象,比如在一个颜色表格行内重复产生一些颜色次序的对象,传递给Velocimacro。

如果你需要使用这个特征,你通常可以从方法内取得一个值,作为一个新的引用传递给宏:

  #set( $myval = $foo.bar() )

     #callme( $myval )

 

Velocimacro 属性

在velocity.properties 文件中有数行定义可以用来灵活实现Velocimacros。详细情况请参见开发指南(Developer Guide)。

velocimacro.library – 是一个逗号分隔的所有Velocimacro 模板库的列表。默认情况下, Velocity 搜寻一个单一的库VM_global_library.vm.。预先配置的模板路径用来查找Velocimacro 库。

 

velocimacro.permissions.allow.inline – 这个属性决定Velocimacros 是否可以在常规模板内定义,取值为逻辑True或者False。默认情况下,设置为true,允许设计者在产规模板内定义宏。

velocimacro.permissions.allow.inline.to.replace.global – 逻辑true 或者false,允许标明是否允许在常规模板内定义的Velocimacro 代替在模板库中定义并通过velocimacro.library属性在启动时装入的全局宏。默认设置为false。

velocimacro.permissions.allow.inline.local.scope – 逻辑true 或者false,默认值为false。 控制是否 在模板内定义的Velocimacros 仅在定义它的模板内可见。换句话说,如果设置为true,一个模板可以定义仅能被他所用的宏。你可以用它来做一些漂亮的宏,如果一个全局调用另一个全局宏,在局部(inline)范围内,当被一个模板调用时,该模板可以定义一个被第一个全局宏调用的第二个全局宏的私有实现。其他所有模板都不受影响。

 

velocimacro.context.localscope – 逻辑值true 或者 false,缺省值为false。但设置为true时,所有在Velocimacro 内通过 #set() 进行的修改都将被视为Velocimacro 的本地行为,不会影响到其上下文。

velocimacro.library.autoreload – 此属性控制Velocimacro 库的自动载入。缺省值为false。如果设置为true,被调用的Velocimacro得源库将被检查是否改变,并在必要是重新载入。这将使你可以改变和测试Velocimacro 库,而不必重新启动应用服务器或者servlet容器,就象你工作在常规模板一样。这个模时仅在资源载入器的缓存模时被关闭的情况下有效 (如 file.resource.loader.cache = false )。此特征为开发时设计,不要在生产模式时使用。

Velocimacro Trivia

当前, Velocimacros 在其首次在模版中使用前必须首先定义它。这意味着, #macro() 宣称应该在使用Velocimacros之前。

如果你想#parse() 一个包含#macro() 指令的模板,记住这个非常重要。因为#parse() 在运行时发生,解析器在解析时要决定是否模版中一个看起来像VM的元素真是VM,所以解析一系列VM 宣称可能并不能如愿地工作的很好。为避免如此,可以简单地使用velocimacro.library 的办法,使Velocity 在启动时载入VM。

 

2.       转义 VTL 指令

VTL 可以通过反斜杠("/")来进行转义,directives can be escaped with the backslash character  in a manner similar to valid VTL references.

## #include( "a.txt" ) renders as <contents of a.txt>

#include( "a.txt" )

 

## /#include( "a.txt" ) renders as /#include( "a.txt" )

/#include( "a.txt" )

 

## //#include ( "a.txt" ) renders as /<contents of a.txt>

//#include ( "a.txt" )

 

在转义在一个单一指令内包含多个脚本元素(比如f-else-end语句)的指令时应多加小心。下面是一个典型的VTL if语句;

#if( $jazz )

    Vyacheslav Ganelin

#end

 

如果 $jazz为 true,输出是

Vyacheslav Ganelin

 

如果 $jazz 为false,将没有输出。转义脚本元素将改变输出。考虑下面的情况;

/#if( $jazz )

    Vyacheslav Ganelin

/#end

 

不管 $jazz 是真或假,输出都是

#if($ jazz )

     Vyacheslav Ganelin

 #end

 

 

事实上,因为所有脚本元素都被转义了, $jazz 永远不会被求值。将设反斜杠在被合法转义的脚本元素之前

//#if( $jazz )

   Vyacheslav Ganelin

//#end

 

这时,如果$jazz 为真,输出是

/ Vyacheslav Ganelin

/

 

为理解这个情况,请注意在一个新行结束是将在输出中忽略新的一行。因此,经过#if()前的'//' 加工后,#if()块紧跟第一个'/'。最后一个/位于新的一行,因为在'Ganelin'后又一个新行,所以,最后的那个位于#end 之前的//是语句块的一部分。

如果 $jazz 为false,这里将没有输出。注意,在开始破坏了if语句的情况将不能被正确转义:

///#if( $jazz )

    Vyacheslave Ganelin

//#end

 

这里,#if 被转义,但有一个#end 被保留了;所以有多个结束语句将导致解析错误。
能量机关 STM32HAL库开发大疆A板WS2812B彩灯(PWM+DMA) 本文主要目的是为了制作RoboMaster比赛能量机关的灯条控制,模拟比赛场中大符,搭建出类似场地道具,以供视觉测试 使用的是RoboMaster开发板A型,芯片为STM32F427IIH6,使用的灯条为WS2812B。 采用PWM+DMA控制,使用CUBEMX配置底层,keil5编辑烧录代码 实现:一共五片扇叶,每片扇叶均实现流水灯+常亮颜色 参考文章在后面会标记出来 阅读详情

相关推荐

基于DBSCAN聚类算法的超像素实时分割

Real-Time Superpixel Segmentation by DBSCAN Clustering Algorithm 摘要 在本文中,我们提出了一种基于密度的带噪声应用空间聚类(DBSCAN)算法的50帧/秒实时图像超像素分割方法。为了降低超像素算法的计算量,我们采用了一种快速的两步框架。在第一个聚类阶段,使用具有颜色相似性和几何约束的DBSCAN算法对像素进行快速聚类,然后在第二个合并阶段,通过颜色和空间特征定义的距离度量,将小簇按其邻域合并为超像素。为了在这两个步骤中获得更好的超像素,定义了

yttt的博客 3492

Velocity用户指南(四)

(7)#macro  #macro指令允许定义一段重复使用的VTL模板(称Velocimacros)。  l         Velocimacros可以有0或多个参数。下面是一个例子:  #macro( tablerows $color $somelist ) #foreach( $something in $somelist )      $

Coolingverse 专栏 2206

【YOLOV5-5.x 源码讲解】整体项目文件导航

前言 这个项目是github的开源项目,YOLOV5:https://github.com/ultralytics/yolov5,目前已经有14.1k个Star 和 4.9k 个Folk了,非常的火。下面我会给大家逐个的文件介绍这个项目中的所有代码,希望能帮到大家。 我下的2021年4月12日更新的v5.0版本,整个项目我做了一点点的文件位置的改变,也加了点自己在其他论文中学到的tricks,不过我没有删除它源码任何一个代码。下面我会按文件逐个函数的进行攻破,因为我本人也还是研一,肯定会有很多的不足,希望大

qq_38253797的博客 6万+

velociy模板引擎使用详解

1.velocity简介 Velocity  是一个基于 Java 的模版引擎。它允许 web  页面设计者引用 JAVA 代码预定义的方法。 Web  设计者可以根据 MVC 模式和 JAVA 程序员并行工作,这意味着 Web 设计者可以单独专注于设计良好的站点,而程序员则可单独专注于编写底层代码。 Velocity  将 Java  代码从 web 页面中分离出来,使站点在长时间运行后仍然具

hil2000的专栏 4994

ArcGIS 泛克里金插值

按照如图所示的步骤填写参数,1处选择subset features。 2:输入数据。 3:输出训练数据。 4:输出测试数据。 5:80,表示80%的比例是训练数据,20%是测试数据。 6:输入的百分比。 1:选择geostatistical wizard。 2:插值方法,克里金插值 3:训练数据。 4:数据字段。 点击下一步: 1:表示泛克里金插值。 2:输出表面类型。 3:转换类型none。 4:趋势剔除的阶数。 点击下一步: 表示东北—西南方向变化平缓。 1:模型优化 2:模型类型(stabl.

yuanYW7556的博客 7274

淘晶驰串口屏自定义协议实战:5分钟搞定苹果时钟通信(附完整代码)

本文详细介绍了如何使用淘晶驰串口屏自定义通信协议快速实现苹果风格时钟的通信功能。通过精简的协议设计和完整的代码示例,开发者可以在5分钟内完成从硬件连接到软件实现的整个过程,适用于嵌入式开发中的高效通信需求。

weixin_29184371的博客 323

使用java和Velocity创建html复杂的table

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33826609的博客 953

『与善仁』Appium基础 — 19、元素定位工具之UI Automator Viewer

文章目录(一)uiautomatorviewer定位工具1、uiautomatorviewer介绍2、uiautomatorviewer工具打开方式3、uiautomatorviewer布局介绍4、uiautomatorviewer工具的使用 之前我们在做web页面自动化的时候就说过,元素定位是页面自动化的第一步。 同理App自动化测试的第一步,也是元素的定位。 在APP中定位元素的话,需要借助一些元素定位工具。 APP中的元素定位工具大致有三种: uiautomatorviewer Appium Ins

繁华似锦Fighting 1520

[error] ResourceManager : unable to find resource ‘VM_global_library.vm’ in any resource loader.

velocity.log出现这样的错误: Mon Jan 17 10:21:14 CST 2011 [error] ResourceManager : unable to find resource ‘VM_global_library.vm’ in any resource loader. Mon Jan 17 10:21:14 CST 2011 [info] Velocimacro : e

lz958942的专栏 4469

别再只会复制Haar级联代码了!OpenCV人脸检测全方案深度解析,从原理到工业级落地

通用预训练模型在你的业务场景效果不好时,用自己的业务数据集训练专属的级联器,是提升精度的终极方案,OpenCV自带和工具,支持自定义Haar/LBP级联器训练。场景首选方案次选方案新手入门学习Haar级联分类器LBP级联分类器嵌入式轻量固定场景LBP级联分类器YuNet轻量版工业级落地项目(99%场景)DNN+YuNetMTCNN多人脸+小目标复杂场景DNN+YuNet自定义微调模型同时做人脸+其他目标检测。

2601_94871597的博客 379

第54节:vue3+cesiumjs

对之前的vue2+cesiumjs 进行了升级

qq_29384639的博客 62

2个table样式

table.css @charset "utf-8"; table{ font-size:12px; table-layout:fixed; border-collapse: collapse; margin:0 auto; } td{ height:25px; } /*第一套css*/ table.table1{ border:1px so

1185

CAPL通过SecMgrCANoeClient.dll实现AES 128

需要加载SecMgrCANoeClient.dll这个动态库,可以在canoe安装路径下Exec32这个文件夹里找。这个库不是哪版canoe都带,canoe15就没有,11,14是有的。我需要用到的是AES 128 ECB nopadding,这里函数介绍说是padding mode PKCS5,但是最后算出的结果是我可以使用的。CAPL中可以使用下列函数实现AES 128的算法。需要注意输入输出字节的长度。

天赐好车的博客 4928

Velocity的中文指南(1)-整理

1.       关于 Velocity 用户指南旨在帮助页面设计者和内容提供者了解Velocity 和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTL examples 都同演示用于所有的页面和模版。感谢选择Velocity! 2.      

火鸟专栏 3412

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Velocity的中文指南(5)-整理

1.       VTL: 格式化 虽然在本指南中的VTL经常显示在新行中或者有空格,但是下面的VTL #set( $imperial = ["Munetaka","Koreyasu","Hisakira","Morikune"] )#foreach( $shogun in $imperial )    $shogun#end 和下面的写法同样有效。

火鸟专栏 2561

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Velocity的中文指南(3)-整理

1.       循环 1.1.     Foreach 循环 #foreach 元素允许进行循环,例如: #foreach( $product in $allProducts )    $product#end这个#foreach 循环将导致$allProducts 列表 (对象) 为查询所有的产品$products (目标)遍历一遍。每次经过循环

火鸟专栏 1988

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

velocity模板引擎-vm语法整理

velocity模板引擎-vm语法整理 模板引擎我目前接触过两次, 第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费,所以使用模板引擎主动生成静态页面,当时使用的是FreeMarker实现的。 第二次是在邮件发送时,想要直接展示制表符等等,使用velocity引擎,vm模板实现。 目录 velocity模板引擎-vm语法整理 一、Velocity 模板引擎介绍 二、入门HelloWord 三、模板基本语法

xinpz的博客 1万+

Velocity的中文指南(2)-整理

1.       取得语义Getting literalVTL 特别的字符,比如$ 和 #, 来做这个工作,因此在模板中使用这些自负的时候必须格外小心。本节讲述$ 的转义。1.1.     货币我们写下句子 "I bought a 4 lb. sack of potatoes at the farmers market for only $2.50!" ,这并没有什么问题。但如前所述

火鸟专栏 2393

Velocity语法-收集整理

Velocity语法-收集整理VTL-Velocity Template Language:VTL意味着提供最简单、最容易并且最整洁的方式合并页面动态内容。 VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的reference。变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前页面内定义的VTL statement得到值

mengdeyulu的专栏 505

利用velocity模板以及itext生成pdf

利用velocity模板以及itext生成pdf 我整理的源码:http://download.youkuaiyun.com/download/u012174571/8748897 首先是velocity的使用:          1.下载:http://velocity.apache.org/download.cgi          2.导入包:velocity-1.7.jar、commons-l

u012174571的博客 4414

JAVA安全之Velocity模板注入刨析

随后进行模板渲染操作,如果nodeTree为null,则返回false,表示评估失败,如果nodeTree不为null,则调用render方法,使用提供的上下文、写入器和日志标签来渲染模板,将render方法的结果(布尔值)作为返回值,如果渲染成功则返回 true,否则返回false。在Apache Velocity模板引擎中$符号用于表示变量的引用,通过$您可以访问在模板中定义的变量、对象属性和方法,这是Velocity的核心特性之一,使得模板能够动态地插入数据。

2401_83799022的博客 2091

Velocity学习整理

velocity命令: 命令快速入门  velocity模板引擎介绍IBM:http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/

uestc_lxp的专栏 351

velocity自定义函数_velocity自定义动画

话说好久没有写博客了,零星的整理了一些东西,没有形成系统,所以也没有在这里记录。废话不多说了,进入今天的正题。不知道大家是否记得之前写过的一篇文章《制作炫酷的专题页面》,里面提到velocity.js可以实现高效的动画方式。并且支持原生JS和jquery或者zepto的结合,让我们方便的使用动画,并且能够方便的监听元素的动画状态。我们可以通过提供的Velocity方法对元素的css属性进行改变,如...

weixin_39712724的博客 257

Velocity脚本入门教程

下面资料整理自网络 一、Velocity介绍 Velocity是Apache公司的开源产品,是一套基于Java语言的模板引擎,可以很灵活的将后台数据对象与模板文件结合在一起,说的直白一点,就是允许任何人使用模板语言引用后台java代码定义的对象Velocity应用于Web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的

ykblog.github.io 4938

velocity java类_velocity调用java方法

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象。下面由学习啦小编整理了几种vlookup函数的使用方法,希望对大家有所帮助。velocity调用java方法一项目结构 velocity tool java类public class T {public String...

weixin_30219823的博客 1035
上一篇: Velocity的中文指南(3)-整理
下一篇: Velocity的中文指南(5)-整理
phoenixup
博客等级 码龄23年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值