先看一个例子:

use v6;
use Bailador; my $data = '
<form action="", method="get">
<input name="text" type="text"/>
<input type="submit" submit="sumbit" />
</form>
'; get '/' => sub {
$data~request.params<text>;
} baile;

一个变量保存html源码, 用request.params<name>获取用户输入, 再连接后输出

那什么叫模板呢, 个人觉得, 一个是为了代码重用, 二个是我们可以在模板文件中嵌入perl语句

一般来说, 直接引用模板用如下语法就行:

template 'index.tm'

默认地, perl6中的bailador把模板自动放到当前脚本的views下面(没有这个文件你要自行创建, 再把模板文件丢进去)

看下面的template与slurp区别:

template 'index.tm';
slurp 'index.tm'

用slurp导入时, 里面的perl语句不会执行, 用template导入的可以执行

在模板文件中(文件一般来说用.tm结尾), 如果要引用perl6语法, 可用如下方式:

% for %*ENV  -> $values {
"<b><%= $values%></b>"
%}

语句用 % 号开头, 要输出变量, 用 <%= $values %> 来内插输出

下面是是一个简单计算器

foot.tm模板源码如下:

<br />
<hr>
<table><font color='red'><b>The Env:</b></font>
%for %*ENV.keys -> $key {
<tr><td><%= $key %></td><td><%= %*ENV{$key} %></td></tr>
%}
</table>
<center><b><font color='green'>Power by: FireC@t</font></b></center>

计算器的test.html源码如下:

<html>
<head><title>Bailador</title></head>
<body>
<form action="" method="get">
<h1>Bailad<font color='green'>or</font></h1>
<input type='text' name='number1' />
<select name='opt'>
<option value ="+" >+</option>
<option value ="-" >-</option>
<option value="*" >*</option>
<option value="/" >/</option>
</select>
<input type='text' name='number2' />
<input type='submit' value='Go' /><br /> </form>
<body>

主页test.p6脚本源码:

use v6;
use Bailador; get '/' => sub {
my $html = slurp 'views/test.html';
my $foot = template 'foot.tm'; #my $foot = template 'foot.tm';
#注意, 这里如果用slurp的话, foot.tm中的代码不会解释
#template能解释里面的perl代码 my $number1 = request.params.<number1> // '';
my $number2 = request.params.<number2> // '';
my $opt = request.params.<opt> // '';
#判断不为空值
if !$number1 || !$number2 {
return $html~'Please Input Number1/Number2'~$foot;
}
#判断是否出错
my $sum;
given $opt {
try {
when '+' {$sum = $number1+$number2;}
when '-' {$sum = $number1-$number2;}
when '*' {$sum = $number1*$number2;}
when '/' {$sum = $number1/$number2;}
CATCH {
return $html~'Something Input Error'~$foot;
}
}
}
$html~$number1~$opt~$number2~'='~$sum~$foot; } baile;

效果如下:

Perl6 Bailador框架(7):模版编写的更多相关文章

  1. Perl6 Bailador框架(5):利用正则匹配路径

    use v6; use Bailador; =begin pod 我们在路径设置上, 可以利正则表达式捕获的字符串作为子例程参数 =end pod get '/perl6/(.+)' => su ...

  2. Perl6 Bailador框架(8):自定义400/500

    第一种方法, 直接写在源码中: use Bailador; get '/' => sub { '<h1>hello, Bailador</h1>'; } get '/te ...

  3. Perl6 Bailador框架(6):获取用户输入

    use v6; use Bailador; get '/' => sub { ' <html> <head><title></title>< ...

  4. Perl6 Bailador框架(4):路径匹配

    use v6; use Bailador; =begin pod /:one/:two/:....路径选择 这个路径, 用/分隔 每个/分隔一个, 如果你只设置两个(/admin/login),时, ...

  5. Perl6 Bailador框架(3):路径匹配

    use v6; use Bailador; =begin pod 注意的是, 当/:one设置时 虽然你有/admin或/about, 但这个/:one不会跟现有的匹配 只跟没有的匹配: 也就是说, ...

  6. Perl6 Bailador框架(2):路径设置

    use v6; use Bailador; =begin pod get表示是get发送 post表示是post发送 get/post 后面的 '/name' 表示是路径 => sub {} 是 ...

  7. Perl6 Bailador框架(1):开始

    use v6; use Bailador; get '/' => sub { '<h1><center>Hello, World</center></h ...

  8. 使用Spring注解来简化ssh框架的代码编写

     目的:主要是通过使用Spring注解的方式来简化ssh框架的代码编写. 首先:我们浏览一下原始的applicationContext.xml文件中的部分配置. <bean id="m ...

  9. RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib

    使用Python构建Lib工程 可以用来开发Python Lib的IDE工具有很多,常见的有Pycharm,Eclipse with PyDev插件等,而且在RobotFramework官网中也已经提 ...

随机推荐

  1. dwarf是怎样处理的栈帧?

    dwarf是如何处理的栈帧呢? 首先看下非dwarf的情况是如何处理栈帧的: 1 3623804982590 0x3e90 [0xb0]: PERF_RECORD_SAMPLE(IP, 0x1): 1 ...

  2. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  3. Bootstrap 按钮,图片,辅助类

    Bootstrap 按钮 任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a&g ...

  4. Java调用WebService之Axis实现

    import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @ClassName: TestAxi ...

  5. CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法

    使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...

  6. 【Luogu】P2901牛慢跑(K短路模板)

    题目链接 K短路居然用A*……奇妙. 先建反图从终点(1)跑一遍最短路,再A*,用堆存当前点到终点距离+从起点到当前点距离. 每次取出终点都可以视为发现了一个新的最短路. #include<cs ...

  7. 【题解】HNOI2016序列

    也想了有半天,没有做出来……实际上做法确实也是十分精妙的.这里推荐一个blog,个人认为这位博主讲得挺好了:Sengxian's Blog; 感觉启示是:首先要加强对莫队算法 & ST表的熟练 ...

  8. BZOJ4827:[AH2017/HNOI2017]礼物——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4827 https://www.luogu.org/problemnew/show/P3723 题面 ...

  9. BZOJ1877:[SDOI2009]晨跑——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 https://www.luogu.org/problemnew/show/P2153 Ela ...

  10. Matrix.(POJ-2155)(树状数组)

    题目是让每次对一个子矩阵进行翻转(0变1,1变0), 然后有多次询问,询问某个点是0还是1 这题可以用二维的树状数组来解决,考虑传统的树状数组是改变某个点,然后查询某一段, 而这个题是改变某一段,查询 ...