我要学https://www.wendangku.net/doc/514032489.html, MVC 3.0(七):MVC 3.0 新的Razor引擎
概述
随着MVC 3.0的发布,越来越多的人都纷纷投入了基于MVC 3.0的开发,不仅如此,MVC 3.0的Razor引擎更是在UI上给力,使得表单数据显示变得更加简便,给人眼前一亮的感觉。
一开始的W ebForm页面Htm l标签和C#代码混用看上去杂乱,而且<% %>标记成对出现,有时代码太混乱了都找不到前后标记,杯具啊!!!
MVC 3.0 新的W ebPages设计,他给我们简洁的代码实现方案。简单的@标记就可以代替成对出现的<% %>,使用起来方便快捷。
实例代码:Razor之简
ASPX
Razor
非常明显,Razor在内部帮我们做了闭合<%%>其实就是这个小小的闭合让我们可以在htm l内更加“流畅”的调用服务端代码。可见Razor的出现还是很给力的!!!
Razor(CSHTML)引擎
_appstart.cshtml :
应用程序启动时在Global. Application_Start方法后执行。
用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。
功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynam ic新特性,作为属性、字段、索引器、参数、返回值或类型约束的类型。
_Layout.cshtml:
布局页面即和aspx的母版页相似。
Razor基础语法
Razor语法其实很简洁就是以@开头,输出变量要以@开头,循环判断for if等还是以@开头,代码体更是要以@开头。。
代码注释
@*输出变量*@
上下文使用变量
@{
ViewBag.Title = "主页"; }
@*输出变量*@
这是 @ViewBag.Title效果
输出Html内容
@{
ViewBag.Title = "主页"; }
@*输出Html内容*@
@{
@ViewBag.Title
DIV
}
效果
支持C#语法
@* 支持C#语法*@
@{
var list = new List
{
}
}
效果
支持逻辑关键字如foreach if else等
@{
ViewBag.Title = "主页";
@* 支持C#语法*@
@{
var list = new List
@* 支持逻辑关键字如foreach if else等*@
@foreach (var person in list)
{
}
效果
逻辑判断
@{
ViewBag.Title = "主页";
}
@* 支持C#语法*@
@{
var list = new List
@* 逻辑判断*@
@if (list.Count > 0)
{
foreach (var person in list)
{
}
效果
文字输出变量输出
@{
ViewBag.Title = "主页";
}
@* 支持C#语法*@
@{
var list = new List
@* 文字输出变量输出*@
@{
@:(*^__^*) 嘻嘻
@:@list[0]
}
效果
数据类型强制转换
@*数据类型强制转换*@
@{
var i = "10";
}
i = @i.AsInt()
效果
循环
@{
ViewBag.Title ="主页"; }
@*支持C#语法*@
@{
var list =new List
@*循环*@
@for (int j =0; j { @:@j: @:@list[j] } @*第二种写法*@ @{ for(int j =0; j { @:@j: @:@list[j] } } 效果 Razor自定义控件 看看微软自己提供的登录和注销 ASPX LogOnUserControl.ascx页面 <%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl"%> <% if(Request.IsAuthenticated) { %> 欢迎使用<%: https://www.wendangku.net/doc/514032489.html, %>! [ <%: Html.ActionLink("注销", "LogOff", "Account") %>] <% } else{ %> [ <%: Html.ActionLink("登录", "LogOn", "Account") %>] <% } %> Razor _LogOnPartial.cshtm l页面 @if(Request.IsAuthenticated) { [ @Html.ActionLink("Log Off", "LogOff", "Account") ] } else { @:[ @Html.ActionLink("登录", "LogOn", "Account") ] } 调用 ASPX Site.Master页面 <%Html.RenderPartial("LogOnUserControl"); %> Razor _Layout.cshtm l页面 @Html.Partial("_LogOnPartial")
关于布局母板以后再探讨。。
总结
从没有接触过Razor的我,今天在做了这么多练习后,突然对Razor引擎有了莫名的好感,感觉很给力。不知大家有没有这种感觉。。
希望MVC在以后的版本里面能够持续出新,在编码方式上带给我们新的享受。。。
js模版引擎handlebars.js实用教程——each嵌套 1 2 3
4 528 55 56
一、如何配置jetTemplate ? ? ? ? ?
拓展方法:可以非常好的进行格式化处理和一些小的模板处理。
?? ??? ???? ?
?o o
二、model and view 我们发现在这一块基本上没有什么区别,把数据对象放在map中,在后面的页面就可以帮我们完成整个的处理。 返回值表示对应的html文件。 这一块没有什么问题。这一块非常方便。 三、页面的布局
ID | 姓名 | 邮箱 | 书籍 |
${user.id} | ${https://www.wendangku.net/doc/514032489.html,} | ${user.email} | 书籍列表 |
整个的思路也非常简单,就是使用#include和#tag layout_block("mainContent")两个标志就可以搞定了。 四、页面渲染 这一块也很简单,看上面的例子和官网上的说明就OK了。
Twig模板引擎使用笔记 安装配置 1.新建一个目录 libs 2.在该目录下新建文件 composer.json,往该文件写入以下内容: 3.{ 4. "require": { 5. "twig/twig": "1.*" 6. } 7.} 8.在 libs 目录上执行 composer install 安装 Twig(前提是已安装 Composer 包管理器) 9.在 libs 上级目录新建三个文件夹:templates、templates_c、web,其中 templates 用来存放 模板文件,templates_c 用来存放编译缓存文件,web 用来存放 PHP 源文件 10.在 libs 上级目录新建文件 MyTwig.php 公共文件,内容如下: 11.// 引用 Composer 自动加载文件 12.require_once dirname(__FILE__).'/libs/vendor/autoload.php'; 13. 14.// 注册 Twig 加载器 15.Twig_Autoloader::register(); 16. 17.// 设置基本的配置项 18.$loader = new Twig_Loader_Filesystem(dirname(__FILE__).'/templates'); 19.$twig = new Twig_Environment($loader, array( 20. 'cache' => dirname(__FILE__).'/templates_c', 21. 'auto_reload' => true 22.)); 23.后续使用时,只需让 web 目录下的 PHP 文件引用该公共文件,且在 templates 目录下放置好 对应的模板即可,引用公共文件的语句为:require_once dirname(dirname(__FILE__)).'/MyTwig.php'; 24.基本的模板渲染语句:echo $twig->render('abc.html.twig', array('name' => 'Ruchee')); 可用符号 == != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor 部分符号的含义如下 ?~:连接两字符串,相当于 PHP 中的点号 ?//:整除 ?**:乘方,相当于 PHP 中的 ^ ?b-and、b-or、b-xor:按位与、按位或、按位异或 ?-:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白、{{ 数据 -}} => 去除右边的空白、{{- 数据 -}} => 去除两边的空白
20个代码生成框架 1 1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛:http://https://www.wendangku.net/doc/514032489.html,/default.aspx 版权形式:30天试用 开源:否 需要先注册确认后才能下载 1.2 MyGenerator MyGenerator是又一个国外很不错的代码生成工具,有人觉得比CodeSmith简单、好用。 所有api可以在帮助菜单中找到。 官方网站:http://https://www.wendangku.net/doc/514032489.html,/portal/default.aspx 官方论坛: 版权形式:免费 开源:否 1.3 NHibernate. NHibernate是Hibernate公司在Java自动生成领域取得巨大成功后推出的一款ORM工具. 官方网站:http://https://www.wendangku.net/doc/514032489.html,/ 官方论坛: 版权形式:免费 开源:否 1.4 湛蓝.Net代码生成器
一款基于软件自动生成理念,能直接生成应用的dotnet代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛:http://https://www.wendangku.net/doc/514032489.html,/ 版权形式:免费 开源:否 1.5 动软.NET代码自动生成器 一款人气很旺的免费C#代码生成器 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛: 版权形式:免费 开源:否 1.6 CodePlus 专为sql server c#语言设计的代码生成器,功能还是很强大 官方网站:http://https://www.wendangku.net/doc/514032489.html, 官方论坛: 版权形式:需要少量的注册费用 开源:否 下载地址很神秘 1.7 CodeMaker asp,jsp,php代码生成工具,自动生成维护数据库信息的动态网页的代码生成器。它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。用CodeMaker可以简单快速的创建网站后台维护程序。提高开发效率数十倍以
上节讲了页面的整个生产流程,大家都期待第三篇,也就是生产的核心内容——Label的替换。说实话,我很有压力啊:)一个人一个实现思路,所以...可能你不能接受。 我的标签分为2种,一种是配置变量标签(就是站点和系统的Config),用%变量名%表示,在初始化Labels之前是要执行替换的。另外一种就是数据调用的Label咯。看下风格: //简单的循环列表 {Article:List Top="10" CategoryId="5"} [field:Title/] {/Article:List} //引用用户控件模版,CategoryId是需要传递的参数 {System:Include TemplateId="5" CategoryId="7"/} //详情页模版 {Article:Model ArticleId="Url(articleid)"}
Discuz模板引擎标签 2009-06-03 09:18 Discuz! 的模板采用近似 PHP 表达式的语法,支持的元素如下: 1. 逻辑元素包围符,该符号用于包含条件和循环元素,其中: statement1 statement2 statement3 为一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容;否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容.如同 其他语言中的条件控制一样,其中 和 是非 必须的. statement 相当于 PHP 的数组循环语句 foreach($array as $value) { statement } 而 statement 相当于 PHP 的数组循环语句
foreach($array as $key => $value) { statement } 逻辑元素包围符在 { } 外面包含了 html 的注释符号 ,除了为了和信息元素 相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户.因逻 辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是 完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行.因 此通常您在修改模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 等)的位置,否则可能会导致错误.如果您的模板被不慎修改损坏,请立 即用原始模板覆盖,即可恢复. 对于高手而言,实际上外部的 是可以省略不写的,可以用于某些元素在模板 中的定位,但强烈建议普通用户不要轻易尝试. 2. { ... } 信息元素包围符,其中 {CONSTANT} 可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容. {lang variable} 可以在模板中引用语言变量 variable 的内容,语言变量经由 https://www.wendangku.net/doc/514032489.html,ng 中数组 $language 定义. 如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是 "编辑帖子". {faq variable} 可以在模板中引用论坛帮助的帮助关键字,在后台=>其他设置=》论坛帮助=》具体某个帮助的详情可以看到或者设置 3. {template name} 模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌
模板引擎Smarty 目录 模板引擎Smarty (1) 一、模板引擎 (2) 1、混合式编程(HTML+PHP) (2) 2、项目的开发流程 (2) 3、什么是模板引擎 (2) 4、模板引擎原理 (3) 二、Smarty模板引擎 (5) 1、什么是Smarty模板引擎 (5) 2、为什么要学习Smarty (5) 3、下载安装 (6) 4、Smarty项目部署(三步走) (6) 5、Smarty入门五步走 (6) 三、详解Smarty工作流程 (8) 1、smarty执行流程 (8) 2、smarty执行原理图 (9) 3、几个常用属性 (9) 1)分界符 (9) 2)与路径相关的四个属性 (9) 3、默认值 (10) 4、常用的方法 (11) 四、设计篇 (11) 1、模板注释 (11) 2、模板中的变量 (12) 1)从PHP中分配的变量 (12) 2)从配置文件中读取变量 (14) 3)在模板中直接定义变量 (14) 3、Smarty中的常用保留变量 (15) 4、变量调节器 (16) 五、内建函数(sysplugins) (20) 1、capture函数 (20) 2、config_load函数 (20) 3、include_php函数 (21) 4、insert函数 (22) 5、if elseif else函数 (23) 6、ldelim、rdelim函数 (24) 7、literal函数 (25) 8、foreach函数 (25) 六、作业: (27)
一、模板引擎 1、混合式编程(HTML+PHP)
编号 | 手机名称 | 价格 |
1 2 3
4 5话说上节听的很郁闷,讲的也郁闷,整个系列没有详细的Code,所以都有点懵。其实仔细看之前的几节应该还是能够理解整个思路的。我在这里再整理一遍:用户访问URL后->根据所有Page的URL 规则(urlpattern)获取当前Page,然后再根据page的Template,Find出所有的Label(通过反射),然后遍历这些Label,把得到的数据的Html替换掉Label本身的标签代码。最后整个Template就是要生成的HTML了。 所以我们要明白Label是如何获取工作才能获取数据库的数据的。一个Label可以理解成一个控件,那么控件必然会支持一些属性(Parameter)和一些内容(Field)。我们上节就是在讲怎么来解析par ameter,因为有些特殊的parameter,所以设计的时候设计了parameter的基类,特殊的则是子类。 同样,field是具体的要展现在HTML代码中的字段,比如中的[field:Title/],这就是一个字段,我们的模版引擎的工作就是把他替换掉应该展现的标题,而如何才能工作?我们就得设计Field的整个逻辑。在替换循环的过程中使用field类。 但是,我今天不讲Field了,因为这样讲大家还是糊涂依旧。今天我们就来设计一个Article:List的初级版。我觉得或许从实例讲解大家更容易理解设计的理念。OK,那就开始设计一个Article.List,我们最熟悉的文章列表。 //简单的循环列表 {Article:List Top="10" CategoryId="5"} [field:Title/] {/Article:List} 想象一下Repeater,有个ItemTemplate,那么对于List这个Label来说,他的ItemTemplate 显然就是Template属性。那么如果我们获取到数据源后直接foreach替换掉所有的field即可。代码大概如下: ///
分享一个简单的python模板引擎 python模板引擎也很多,但是希望可以使用python原生的来作模板而不用在创建一个新的语法,但是python本身的缩进又不适合做模板所以要把缩进去掉就可以了 #coding:utf-8 __author__="sdm" __author_email='sdmzhu3@https://www.wendangku.net/doc/514032489.html,' __date__ ="$2009-8-25 21:04:13$" ''' pytpl 类似php的模板类 ''' import sys import StringIO import os.path import os #模板的缓存 _tpl_cache={} class Pytpl: def __init__(self,tpl_path='./'): self.tpl_path=tpl_path self.data={} self.output = StringIO.StringIO() pass def set(self,name,value): ''' 设置模板变量 ''' self.data[name]=value; pass def get(self,name): ''' 得到模板变量 '''
t={} return t.get(name,'') pass def tpl(self,tplname): ''' 渲染模板 ''' f=self.tpl_path+tplname if not os.path.exists(f): raise Exception('tpl:[%s] is not exists' % f) mtime=os.stat(f).st_mtime if not _tpl_cache.has_key(f) or _tpl_cache[f]['time'] ASP模板引擎 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。 摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载 组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。 当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差。在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都较好的实现了逻辑层和表现层的分离.由 于PHP的影响,在ASP界有人借鉴phplib等使用替换的方法开发出asp的模板类,由于ASP在字符处理上性能并不是很强大,所以在速度上受到影响,这样的模板在目前的应用也不是很广泛。如: 1 2 3ASP模板引擎
1 2<% 3TemplateCode=Load("template.html")'自定义函数,装载模板文件到TemplateCode 4TemplateCode=Replace(TemplateCode,"{$title}","asp模板引擎终结者")'替换模板 5TemplateCode=Replace(TemplateCode,"{$body}","asp模板引擎终结者内容")'替换模板 6Response.Write TemplateCode 7%> 上面的例子只是初步展示了当前ASP模板的思想,有ASP 版的CMS系统已经嵌入了对模板的逻辑控制,虽然能够实现逻辑和界面的分离,但是这种模板存在的问题就是模板需要每次都用ASP解析一次,程序相当于解析两次,而且当要替换的内容很多的时候,将会降低性能.而且装载模板需要服务器支持一种组件(FSO,ADODB,XMLHTTP均可实现). 借鉴于编译型的模板,我在ASP中引进这种思路.提出一种应用在ASP中的功能和性能都很优良的模板体系.下面用代码表示: 1 2 3
4