play框架之模板

现在网站发展日新月异,网页上显示的东西越来越复杂,看看HTML源码就知道,这东西不是正常人能拼出来的。因此模板应运而生,自我感觉,好的模板应该支持一下功能:

1.支持HTML代码段的复用,即在HTML里面可以非常方便的include常用的html代码,比方title、header和boot等;

2.支持HTML文件的继承,有些HTML文件从结构来看,完全相同,只是一些具体细节或数据有差别,这个时候就可以创建一个公共模板,其它类似的文件对其进行extend;

3.在继承模板文件的基础上,最好能支持HTML的模块化,这样只需要重写不同的地方,相同的地方可以忽略。

PS:感觉django自带的模板就特别好用,基本上以上的功能都实现了。

言归正传,play2自带的模板系统也支持以上功能,上代码app_active.scala.html:

@(push_date:List[Long],adr_rate:List[Integer],ios_rate:List[Integer],actives:List[models.AppActive],daterange: Form[controllers.Application.DateForm])
@main(title="app_active"){
    @helper.form(action = routes.Application.app_active()) {
        <fieldset>
        @helper.inputText(daterange("start_date"))
        @helper.inputText(daterange("end_date"))
        </fieldset>
        <input type="submit">
        }
<p></p>
  <div id="main" style="width: 950px;height:580px;"></div>
  <script type="text/javascript">
          var myChart = echarts.init(document.getElementById(‘main‘));
          var push_date =@push_date;
          var new_date=[]
          for(i=0;i<push_date.length;i++){
              var temp=new Date(push_date[i]);
              new_date.push(temp.Format("yyyy-MM-dd"));
          }
          var adr_rate = @adr_rate;
          var ios_rate = @ios_rate;

          // 指定图表的配置项和数据

          @bar_tem2()

          option.series[0].name=‘adr活跃‘
          option.series[1].name=‘ios活跃‘
          option.series[0].stack=‘one‘
          option.series[1].stack=‘one‘

          option.legend.data=[‘adr活跃‘,‘ios活跃‘]
          option.dataZoom=[{type: ‘slider‘,start: 0,end: 100 },{type:‘inside‘,start: 0,end: 100}]

          myChart.setOption(option);
  </script>
} {<table border="1">
    <tr>
        <th>Date</th>
        <th>ADR</th>
        <th>IOS</th>
    </tr>@for(active <- actives) {
    <tr>
        <td>@active.push_date</td>
        <td>@active.adr_rate</td>
        <td>@active.ios_rate</td></tr>
}</table>

}

这是一个实现从表单填数据,查询数据库并返回数据,显示成图表的功能。

1.第一行的数据是从controllers文件种传递过来的,下面是controllers中Application的代码:

public static Result app_active(){
        Form<DateForm> daterange=Form.form(DateForm.class);
        DynamicForm in   = Form.form().bindFromRequest();
        if(in.get("start_date")==null){
            String start_date    = "2016-12-29";
            String end_date    = "2017-01-01";
            List<AppActive> actives=AppActive.find.where().between("push_date",start_date,end_date).findList();
            List<Long> push_date=new ArrayList<Long>();
            List<Integer> adr_rate=new ArrayList<Integer>();
            List<Integer> ios_rate=new ArrayList<Integer>();
            for(AppActive active:actives){
                push_date.add((active.push_date).getTime());
                adr_rate.add((Integer) active.adr_rate);
                ios_rate.add((Integer) active.ios_rate);
            }
            return ok(views.html.app_active.render(push_date,adr_rate,ios_rate,actives,daterange));
        }else {
            String start_date = in.get("start_date");
            String end_date = in.get("end_date");
            List<AppActive> actives = AppActive.find.where().between("push_date", start_date, end_date).findList();
            List<Long> push_date = new ArrayList<Long>();
            List<Integer> adr_rate = new ArrayList<Integer>();
            List<Integer> ios_rate = new ArrayList<Integer>();
            for (AppActive active : actives) {
                push_date.add((active.push_date).getTime());
                adr_rate.add((Integer) active.adr_rate);
                ios_rate.add((Integer) active.ios_rate);
            }
            return ok(views.html.app_active.render(push_date, adr_rate, ios_rate, actives, daterange));
        }
    }

2.第二行@main,意思是这个html文件继承自main.scala.html,main.scala.html文件主要定义了HTML文件引用的js/css/png文件,原文如下:

@(title:String)(content:Html)(data:Html)
<!DOCTYPE html>
<html>
<head>
    <title>@title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    @*<link rel="stylesheet" type="text/css" media="screen" href="@routes.Assets.at("stylesheets/main.css")" />*@
    <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")" />
    <link href="http://apps.bdimg.com/libs/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    <link href="http://apps.bdimg.com/libs/jqueryui/1.10.4/css/jquery-ui.min.css" rel="stylesheet"/>
    <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://apps.bdimg.com/libs/jqueryui/1.10.4/jquery-ui.min.js" ></script>
    <script src="http://apps.bdimg.com/libs/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    @*<script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" ></script>*@
    <script src="@routes.Assets.at("javascripts/dateformat.js")" ></script>
    <script src="@routes.Assets.at("javascripts/datepicker.js")" ></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/3.2.2/echarts.min.js"></script>
    <script src="http://echarts.baidu.com/asset/map/js/china.js"></script>
</head>
<body>
@content
@data
</body>
</html>

3.第三行@helper是play2的表单文件,在此不多复述。

4.中间还有一个@bar_tem2(),是引用的一段公用js文件,文件名即为bar_tem2.scala.html,内容如下:

var option = {
title: {
text: ‘‘,
left:‘center‘,
},
legend: {
data: [‘bar‘, ‘bar2‘],
x: ‘center‘,
},
toolbox: {
// y: ‘bottom‘,
left: ‘left‘,
top: ‘top‘,
feature: {
magicType: {
type: [‘stack‘, ‘tiled‘,‘line‘,‘bar‘]
},
restore:{},
dataView: {},
saveAsImage: {
pixelRatio: 2
}
}
},
//浮层
tooltip : {
trigger: ‘axis‘
},
xAxis: {
data: new_date,
silent: false,
splitLine: {
show: false
}
},
yAxis: {
},
series: [{
name: ‘bar‘,
type: ‘bar‘,
data: adr_rate,
animationDelay: function (idx) {
return idx * 10;
}
}, {
name: ‘bar2‘,
type: ‘bar‘,
data: ios_rate,
animationDelay: function (idx) {
return idx * 10 + 100;
}
}],
animationEasing: ‘elasticOut‘,
animationDelayUpdate: function (idx) {
return idx * 5;
}
};

5.最后一段采用一个for循环,对actives进行遍历,将一组二维数据展示为一个表格

时间: 2024-08-03 15:24:16

play框架之模板的相关文章

tinyshop框架教程模板开发与开发手册讲解

第一课 tiny框架的处理流程与目录结构 [录播]了解tiny框架的处理流程与目录结构(27分钟) 02 第二课 tiny框架的程序入口与url模式 [录播]tinyshop框架的程序入口与url模式(15分钟) 03 第三课 tiny框架的配置文件与配置参数讲解 [录播]tinyshop框架的配置文件与配置参数讲解(11分钟) 04 第四课 tiny框架的命名规范 [录播]tinyshop框架的命名规范(13分钟) 05 第五课 tiny框架的配置文件system.php的参数讲解 [录播]t

Express 框架、模板,MongoDB数据库

今天跟大家分享的是Express框架.模板.MongoDB数据库:个人觉得很有用,希望能在大家做项目的的过程中能有所帮助. Express 模板 这是一个用户量较大的一个Node框架,提供了一整套的Node模板,在里面可以使用EJS模板引擎.. 基于 Node.js 平台,快速.开放.极简的 web 开发框架.(开发后端) Express的性能对Node没有影响,依然很高. 安装方法: 1. 全局安装express 和 express应用生成器 npm install express -g np

Django框架之模板

Django框架之模板层 什么是模板 需要返回给浏览器的html文件 Django的模板 = HTML代码 + 模板语言 模板语言 有与我们直接返回html页面的话,那他只是一个静态页面无法实现前后端数据交互,那么我们就需要经过页面渲染,让静态文件呈现出动态页面的效果. 模板语言的变量 如果我们需要将后端的数据传递到前端页面渲染,就需要用到模板语言中的变量 用法:通过{{}}来获取后端传递过来的数据 变量支持的数据类型: int float str dict list tuple set boo

joomla T3框架中模板分离与自定义(local文件夹)

问题:辛苦做的模板,在框架升级后,莫名其妙的就不见了?原因是,在原有默认的模板修改内容,升级到新版本时,修改的内容被新内容覆盖更新掉了. 1. 怎么办? 模板内容被覆盖的问题,可以通过将用户的设置.模板与默认模板分离出来,具体方法如下: 在模板中,有个特殊的文件夹"local",将用户所有的布局配置信息.布局文件放到这个文件夹中. 2.文件的优先级 local文件夹:/templates/{template-name}/local template文件夹:/templates/{tem

laravel框架(blade模板引擎)

## 1.基本用法 ```##情形1  $name = laravel5<div class="title"> {{$name}}  {{$name}}</div>//输出结果是  larave5  larave5 ##情形2  $name = laravel5  并且使用@的情形<div class="title"> {{$name}}  @{{$name}}</div>//输出结果是  larave5{{$name

TP框架的模板路径问题以及常用的模板常量的定义

在TP框架中,为了各个模块加载静态文件方便,往往是不需要按照默认的方式放置静态文件到/app/模块名/VIEWS/下面,而是在顶级目录下创建一个新的目录(比如说./tpl目录下),来存放静态文件   设置方法:                  (1):在TP的入口文件中定义:                       define( 'TMPL_PATH' , './tpl/' ); //定义模板路径                  (2):手动创建./tpl目录(注意,框架不会自动生成该

web框架--tornado框架之模板引擎

使用Tornado实现一个简陋的任务表功能demo来讲解tornado框架模板引擎 一.demo目录结构 二.具体文件内容 2.1.commons.css .body{ margin: 0; background-color: bisque; } 2.2.index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title

THINKPHP 框架的模板技术

//echo C('name'); App/Action/IndexAction.class.php文件夹下的 URL模式 //输出URL模式//echo C('URL_MODEL'),'<br/>';//U('Index模块名/方法',array('id'=1),'xxxx html',true/false,'localhost'),true可直接跳转/* * 1是默认的url模式* http://localhost/muke/index.php/Index/user/id/1.html*

joomla T3框架中模板分离与自定义(local文件夹 实战研究)

1.重写布局配置(kjxxzx-corporate-home.ini) 模板商purity_iii提供的布局配置文件的路径:/templates/purity_iii/etc/layouts 自定义布局时,用户布局配置文件应放在:/templates/purity_iii/local/etc/layouts 2. 重写布局文件(kjxxzx-corporate-home.php) 模板商提供的布局文件的路径:/templates/purity_iii/tpls 如果用户想重写布局文件或区块文件,

tp框架之模板继承

模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载. 因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块. 每个区块由<block></block>标签组成.下面就是基础模板中的一个典型的区块设计(用于设计