def GET(self): raise web.seeother(?/sub app?) class saname: def GET(self, name): return name
app = web.application(urls, locals())
然后在main.py里加入suapp包的引用import subapp,在urls映射中添加一项映射“/sa”, subapp.app,然后用url地址http://your.domain.name/sa,相应的就是subapp包下的sa类,被重定向到saname类中,传递给saname的参数是sub app,因此最终页面上显示的是sub app字样。这里要注意的就是,在子程序中的url路径都是相对于子程序自身的相对路径,而不是从网站根开始的路径。
4模板
在向用户返回页面内容的时候,可以在GET或POST处理函数的return处返回html页面的代码,但是这样做显然很麻烦,这时候就需要使用模板了。这里的模板就有点像用Java写web程序时用的jsp,用return返回页面就有点像直接用servelet。
4.1创建模板
这里,我们先在项目中新建一个目录templates集中存放模板文件,便于管理。然后在templates下新建一个index.html文件,在新文件中写入如下代码: $def with (name)
这是一个最简单的html页面代码。
4.2使用模板
然后在修改使用这个模板的类,比如说我们在main.py模块中的新写一个index类,入下: class index: def GET(self):
render=web.template.render(“templates”) return render.index(“Lisa”) 同时修改urls为: urls = (“/”, “index”)
这样,网站默认调用index类,进而使用index.html模板,打开浏览器查看结果,页面就会打印出Hello, Lisa的字样。
除此之外还有两种使用模板的方法,一是使用frender直接指定模板文件,GET函数最后两行改为:
render=web.template.frender(“templates/index.html”) return render(“Lisa”)
或者直接在代码里写出模板文件,如把GET最后两行改为: template = “$def with (name)\\nHello $name”
render = web.template.Template(template) return render(“Lisa”)
4.3模板含义
解释一下这个模板的含义:
在index.html第一行$def with (name)表示本模板接受一个名为name的参数,也就是对应index类中return render.index(“Lisa”)中的Lisa。
而render=web.template.render(“templates”)表示创建一个模板对象,模板是存放于templates目录下,然后就可以用所创建的render对象来访问相应的模板,比如templates目录下的index.html就是用render.index来表示(实际上是匹配寻找index.*文件,第一个匹配的就认为是所对应的模板文件),如果templates下还有个a目录,a目录下有个pagea.html,那么访问这个pagea模板就要用render.a.pagea的形式了。
4.4页面参数
页面接收的参数可以多于一个,也可以没有,如果不需要参数,则就不需要$def with (name)这样的代码,删除掉这一句,同时修改模板中对name变量的引用,修改index类最后一句为return render.index()就可以了。
如果有参数,那么模板的第一行代码就必须是这个$def with (…),可以多于一个参数,比如是这样$def with (gname, fname)。模板下面的那行字改为Hi, $gname $fname。同时Index类GET返回的时候赋予对应两个参数return render.index(“Lisa”,”Hayes”)。这样,页面最后显示的是打印出Hi, Lisa Hayes的字样。
另外,模板接受的这个参数也可以是一个元组,比如像下面这样: return render.index((“Lisa”,”Hayes”)) 在模板中可以如下以元组方式访问参数数据: Hi, $name[0] $name[1]
4.5模板语法
模板语法与python语法基本一致,主要差别可以从上面的代码中看到,要使用到$符号表明这不是文本而是模板代码。也就是每当用到程序代码、对象的时候就必须用$来与html代码和页面显示文本相区别。
4.5.1对象赋值
向对象赋值时需要在$与对象名之间留空格,如为一个名为vara的字符串对象赋值apple的代码为$ vara = “apple”。
另外,对象赋值语句必须独占一行,前面或后面有其他代码则会程序出错。
4.5.2对象引用
引用对象的时候直接使用$+对象名的形式,如$vara。
另外引用对象时还可以用{}或()将对象进行明确的分组,如$(vara)s就会表示apples,如果没有括号,程序则会把$ varas作为一个整体,也就变成对varas对象的引用而发生错误。 另如果向如下定义两个数字型对象: $ varb = 1 $ varc = 2
然后希望计算两个值的和,如果用$varb+$varc的形式,页面上只会得到1+2而不是3,这时也就需要把两个对象放在括号里,如$(varb+varc)的形式才能得到正确答案3。
4.5.3注释
模板中支持单行注释,以$#符号开始到行末都是注释内容。 $#This is comment
注释前面可以有其他内容,但是不可以有赋值代码。 如下代码是正确的: Hi $#This is comment
但下面的则会出错:
$ vara = “apple” $#This is comment
4.5.4Filtering 4.5.5打印$符号
由于$符号在模板中有特殊用途,所以在页面上输出$时需要进行转义操作,用连续两个$表示在页面上输出一个$符号。 Can you lend me $$50?
4.5.6控制代码(循环、条件判断)
模板中支持for、while、if、elif、else,用法与在python一致,只是控制代码行要以$开始(包括break和continue命令),$开始的代码行中对象不需要在前面再加$符号,同时要注意缩进规则,如:
$for i in range(10): line:$i
但要是第二行代码与for行代码写在同一行中,i对象前还是需要有$的: $for i in range(10):line:$i
While循环: $while a: hello $a.pop() if else判断: $if times > max:
Stop! In the name of love. $else:
Keep on, you can do it.
在for循环中,有一组内置的变量可以使用,非常方便,分别如下所示:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库webpy(2)在线全文阅读。
相关推荐: