- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ASP网页模板的应用: 让程序和界面分离,让ASP脚本更清晰,更换界面更容易由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松。 在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况。这样子做有许多缺点: 1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范; 2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护。 那么,要如何才能避免这些麻烦呢? 答案就是使用模板文件,将ASP代码和HTML页面分开,一切问题就都解决了。使用模板有以下好处: 1. 在很短的时间内可以替换整个站点的外观; 2. 使程序员可以抽象编程,而无须接触HTML代码; 3. 可以重复利用以前的模板。 使用过PHP的程序就会知道,PHP有个模板程序(FastTemplate),现在的问题是如何在ASP中实现类似的功能。 Microsoft的ASP带有两种脚本:VBScript和JScript。它们都带有一个 "正则表达式对象" (RegExp),利用字符串对象和RegExp对象,就可以轻松的实现模板功能。沐枫以此编写了一个 "Template.JScript.INC" 文件,此文件的内容附在文章后面。有能力的读者可以根据自己的需要进行改进。 下面介绍一下使用方法。由于此文件是使用JScript编写的(当然要转成VBScript也很容易),因此,缺省脚本语言要设为JScript,即ASP程序第一行应为:<%@Language=JScript%>,然后再包含模板程序文件:<!--#include file="Template.JScript.INC"-->。 先介绍一下Template类的使用: 1. 建立Template对象:Template(Path) 参数:Path(字符串类型) HTML模板文件的存放路径。 使用new 操作符建立Template对象。 例子: var tpl = new Template("c:\\template"); 在程序中可以用tpl.TplPath来取得模板路径,也可以通过tpl.TplPath来改变模板路径。 如: tpl.TplPath = "d:\\template"; 2. 装载模板文件:Template.Load(Name, File) 参数:Name(字符串类型) 是一个模板变量名。 File(字符串类型) 模板文件名。此文件存放在HTML模板路径下。 读取文件File到模板变量Name中。 例子: tpl.Load("Main", "TEST.HTM"); 此时,模板变量Main就包含了文件TEST.HTM的内容。 你可以用tpl.Main来访问模板变量"Main"。 例子: <%=tpl.Main%> 将显示刚才读进来的TEST.HTM文件内容。 3. 模板分拆:Template.Split(Name) 参数:Name(字符串类型) 是一个模板变量名。 将Name中的子模板分解。 例子: 先假设上例中的TEST.HTM内容为: ------------------- 这是主模板。接下来是:<!--#TPLDEF SUB-->SUB子模板,还有 <!--#TPLDEF THIRD-->THIRD模板。<!--#TPLEND THIRD--> <!--#TPLEND SUB--> ------------------- 那么: tpl.Split("Main"); 执行以后,就会生成新的模板变量"SUB",和"THIRD",它们的内容就是<!--#TPLDEF SUB-->和<!--#TPLEND SUB-->之间语句。 而且"Main"模板变量的内容也会发生改变: tpl.Main 的内容为:"这是主模板。接下来是{SUB}" tpl.SUB 的内容为:"SUB子模板,还有{THIRD}" tpl.THIRD 的内容为:"THIRD模板。" TPLDEF 和 TPLEND 定义的语句块充许多重嵌套。 4. 模板处理:Template.Parse(Name) 参数:Name(字符串类型) 是一个模板变量。 将模板中用花括号括起来的字串用同名的模板变量的内容替换。 例子:续上例 <%=tpl.Parse("Main")%> 显示:"这是主模板。接下来是SUB子模板,还有{THIRD}" 由例子可知,Parse只替换"Main"模板中的{SUB}变量,而不能嵌套替换下去。这是为了增加程序灵活性而故意设计的。那么该怎么样完整显示"Main"模板呢? 例子: tpl.SUB = tpl.Parse("SUB"); //先处理SUB变量,再处理Main变量。 Response.write(tpl.Parse("Main")); 5. 自定义模板变量。 自定义模板变量很简单,可以直接用赋值语句来定义和修改任何变量: 例子: tpl.Hahaha = "这是自定义变量"; tpl.THIRD = "改变原模板中的THIRD变量"; 需要注意的是,由于JScrip是区分大小写的,因此一定要注意大小写的拼写。一般来说,HTML模板中定义的模板变量都用大写。 另外,模板中使用的"TplPath","Load","Parse","Split"变量是内部使用的,不要挪做它用,否则程序将可能发生异常。 下面举个完整的例子: 第一步:先建立Html模板文件。 这里先说明HTML模板文件的组成。首先,它和普通的HTML文件几乎没有区别,只不过多了几个标记。 模板的标记有两种。让我们先看一个例子: TEST.HTM ----------------- <!--文件名:TEST.HTM--> <HTML> <TITLE>范例</TITLE> <HEADER> </HEADER> <BODY> 这是一个表格范例。 <TABLE> <!--#TPLDEF MAXX-->10<!--#TPLEND MAXX--> <!--...注意,此处使用了一个技巧即定义了MAXX模板变量并赋值为10。--> <TR> <TD>X</TD><TD>X的平方</TD> </TR> <!--#TPLDEF ROW--> <TR> <TD>{X}</TD><TD>{XX}</TD> </TR> <!--#TPLEND ROW--> </TABLE> 以上共有{COUNT}行数据。 </BODY> </HTML> ----------------- 从上面可以看出,象{X},{XX},{COUNT}之类的记号是定义模板变量。它们将会在ASP程序中被替代。 而<!--#TPLDEF ROW-->...<!--#TPLEND ROW-->是定义一个语句块"ROW"。在ASP程序中就可以将"ROW"块重复多次。 第二步:设计ASP程序。 TEST.ASP ------------------- <%@Language=JScript%> <!--#include file="Template.JScript.INC"--> <% var tpl = new Template("c:\\Inetpub\\wwwroot"); var str=""; var i; tpl.Load("Main","TEST.HTM"); tpl.Split("Main"); tpl.COUNT = 0; for(i=1;i<=tpl.MAXX;i++) //tpl.MAXX在模板中定义为10。 { tpl.X = i; tpl.XX = i*i; str+=tpl.Parse("ROW"); tpl.COUNT++; } tpl.ROW = str; tpl.MAXX =""; //清空此模板变量,以避免被显示出来。 %> <%=tpl.Parse("Main")%> ------------------- 上面的程序将显示一个1到10的平方表。 通常在使用模板的情况下,都只要在最后一行加上显示页面的语句。因此整个程序显得十分清晰。此时,只要对模板文件进行编辑,就可以改变整个页面的外观。 至于模板文件,它可以是任何文件,如HTML文件、ASP文件,甚至是程序本身!,而且在一个程序中可以装载多个模板配合使用,这样,不仅具有极大灵活性,而且模板文件与ASP程序的相关性可减到最低程度。 好好利用模板,将会使你的工作更加轻松。 附:Template 源程序 ------------------------------------ <!--文件名:Template.JScript.INC--> <% /*********************************************************/ /* Template Class */ /* Author: 沐枫 (lin.y@263.net) */ /* Date: 2000-6-09 */ /*********************************************************/ //Template Method Define function Template_Parse(name) { if(this[name]==null) return ""; var reg = new RegExp("{(\\w*)}","ig"); var str = new String(this[name]); var arr = str.match(reg); var i; if(arr != null) for(i=0;i<arr.length;i++) { key = arr[i].slice(1,-1); reg = new RegExp(arr[i],"ig"); if(this[key]!=null) str = str.replace(reg,this[key]); } return str; } function Template_Split(name) { var len = 0; var arr; if(this[name]==null) return; var Template_Exp = new RegExp("<!--#TPLDEF +(\\w*) *-->((.|\\n)*)<!--#TPLEND +\\1 *-->","i"); while(this[name].search(Template_Exp)!=-1) { arr = this[name].match(Template_Exp); this[arr[1]] = arr[2]; this[name] = this[name].replace(Template_Exp,"{"+arr[1]+"}"); this.Split(arr[1]); } } function Template_Load(name,filename) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.BuildPath(this.TplPath, filename); if(fso.FileExists(file)) { var f = fso.OpenTextFile(file, 1); this[name] = f.ReadAll(); } } //Template Constructor function Template(path) { //Property this.TplPath = path; //Method this.Parse = Template_Parse; this.Split = Template_Split; this.Load = Template_Load; } %> 。
最后此篇关于ASP网页模板的应用: 让程序和界面分离,让ASP脚本更清晰,更换界面更容易的文章就讲到这里了,如果你想了解更多关于ASP网页模板的应用: 让程序和界面分离,让ASP脚本更清晰,更换界面更容易的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
namespace std { template <> class hash{ public : size_t operator()( cons
我正在构建一个 Javascript 交互性有限的 Django 应用程序,并且正在研究如何将 Vue 模板与 Django 模板合并以实现相同的内容。 想象一个无限滚动的页面,其中 SEO 非常重要
我需要一个由游戏逻辑组成的外部类,调用 LitElement 组件,并向其传递一个 html 模板文字,该组件将使用该文字来更新其自己的 html 模板文字的一部分。 在下面的代码中,您将看到组件的一
很简单,我不想在 html 文件中定义所有 Handlebars 模板 我试过了 但这并没有奏效。我是否可以不以编程方式定义模板,甚至只是加载 Handlebars 文件,以便我可以重用,而且我觉得
在此代码中,j 正确地成为对象:j.name、j.addr、j.city、j.state 和 j.zip。但是,成功函数有一个 JavaScript 错误 .tmpl() 不是函数。 {{t
Django模板不会?点进来,总结了模板语法传值取值、过滤器和自定义过滤器、模板标签的分类、中间件403报错如何解决、如何继承模板~👆 Django 模板 模板传值取值 后端传值 键值对形式:{‘n
哈喽大家好,我是鹿 九 丸 \color{red}{鹿九丸}鹿九丸,今天给大家带来的是C++模板。 如果大家在看我的博客的过程中或者学习的过程中以及在学习方向上有什么问题或者想跟我交流的话可以加我的企
我正在用 PHP 编写一个简单的模板层,但我遇到了一些困难。目前它是这样工作的: 首先,我使用 fetch_template 从数据库中加载模板内容 - 这可行(如果您有兴趣,我会在启动时收集所有模板
我正在制作有关模板的 Django 教程。我目前处于此代码: from django.template import Template, Context >>> person = {'name': '
我正在使用 Jquery 模板来显示传入的 JSON 数据我想将模板加载到可缓存的外部文件中。我该怎么做? 更新 http://encosia.com/2010/12/02/jquery-templa
这是我的观点.py: from django.http import HttpResponse from django.template.loader import get_template from
我试图说服一位同事在项目的前端使用 Mustache/Hogan,我提出了以下建议: 有一个 templates.js 文件,大致如下所示: var tpl_alert = '{{msg}}'; va
我想创建一个通用的数组函数。在我的 API 中,我有一个通用容器,我需要将其转换为正确的类,但我想让它通用 template void UT::printArray(CCArray* arr, T t
有谁知道是否有办法在 Genshi 中创建 javascript 模板?我的意思是,我需要一个 .js 文件,可以在其中使用 等指令。等等。 有什么想法吗?谢谢! 最佳答案 你可以直接在html中这
我想知道是否可以设置某种 HTML 模板系统,基本上我有 3 个不同的文件: - header.html - footer.html - landing.html(landing.html 是包含页面
我正在尝试构建以下 HTML 模板: 这很简单,如果我使用红色容器 1-4,语法如下: 1 2 3 4 5 6 7 8 9 https://jsfi
#include "boost/numeric/ublas/matrix.hpp" using namespace boost::numeric::ublas; template class Lay
我在一个类中有一个函数,它传递了一个函数及其参数,然后将它们绑定(bind)到一个函数调用中并调用该函数等。 这已经被快速组合在一起以测试我知道代码不是很好的概念。 class Profiling {
是否有一个 c++ 结构或模板(在任何库中)允许我在十进制和任何其他基数之间进行转换(很像 bitset 可以做的)? 最佳答案 是的,你可以使用unsigned int: unsigned int
数据类型给程序设计带来的困扰及解决方案 int maxt(int, int); double maxt(double, double); 若有一种占位符T,能够代替类型,便可以简化代码的冗余编写
我是一名优秀的程序员,十分优秀!