在html檔案中寫python文法的內容,的注意事項:
1:python程式中的變數通過下面方法傳入到html:
1:通過全域變數 :全域變數是不需要用$def with文法實現傳遞的,只要定義了
在html中就可以用,例子如下:
===================================================================
#模板公開變數,下面可以定義所有的html檔案都要用到的變數 ,不需要複雜的
$def with (va,vb)
t_globals = {
'datestr': web.datestr,
'cookie': web.cookies,
"loginform": login,
"gposts":model.get_posts,
}
#指定模板目錄,並設定公用模板,base="base"設定共用的base.html模板,
在./templates/base.html這個路徑 找到這個檔案
render = web.template.render('templates', base='base', globals=t_globals)
=========================================================
2:通過在python程式中在render時傳入 ,例子如下:
=========================================================
在python檔案中,
render=web.template.render("./")
class index:
def GET(self):
abc="world"
render.index(name=abc)
在index.html檔案中:
$def with (name)
hello $name
===========================================================
可以看到上面的例子是在python檔案中對index()函數傳入了name,
而在index.html檔案中,要定義一個臨時變數,接受這個傳入的變數
abc是python中的變數的名字
name是html檔案中變數的名字,
在render.index(name=abc)實現了變數的傳遞 ,
注意:在 python中render.index(a,b)可以傳遞多個變數
那麼在 html檔案中就要聲明對應的臨時變數 $def with (va,vb)
===========================================================
2:使用模板的幾種方法:
1:直接使用html檔案,並向index.html檔案傳入python變數 ,例子如下,
在python中:
render=web.template.render("templates")class index: def GET(self):return reder.index("wolrd")
#templates是目錄,到時把所有html檔案放在templates目錄下,如要用到的index.html
2:直接指定具體的檔案,這個方法擴充行不好,
hello=web.template.frender("templates/hello.html")return hello("world")
3:使用字串
html="$def with (name)\n hello $name"hello=web.tempate.Template(html)return hello("wolrd")
================================================================
可以看到調用了template的三種方法:
render=web.template.render("templates")只指定html檔案的路徑 render.index("world")hello=web.tempalte.frender("templates/hello.html")指定了具體的html檔案hello("world")hello=web.template.Template(string)直接把字串傳入進去,hello("world")
================================================================
上面三種方法最常用的是第一中,render.index的方式,
================================================================
3:下面是python 在html檔案中的基本文法
1:得到變數的值 ,注意只是文法,沒有太多的為什麼
$varible$(varible)${varible}
2:在html檔案中建立新的變數 ,肯定是在賦值時才會建立新的變數 啊
文法如下,$ 加上空格 加上變數名,空格很重要
$ bug=True$ va=1<div>$var</div>
3: 在取變數的值的時候 ,你會看到兩種文法:
第一種: $a
第二種: $:a
預設的python會使用web.websafe filter對變數做HTML-encoding.就是第一種方式,第二種方法不會對變數a做html-encoding
4: \ 這個符號的有點意思,會使多行的內容,只顯示一行
hello \
wolrd
注意:要在\ 這個符號後面馬上敲enter,要不然 \的特殊含義會消失,而且會一起顯示出來
5:問你個問題,如何在html檔案中顯示$這個符號(因為給webpy當特殊的用了)
答案很簡單,輸入兩個$$就行了
美元的符號是$$
親,上面只會顯示一個$哦
6:在html中如何寫python風格的注釋呢,我說的不是<!這樣的注釋哦>
$#這是注釋,你在瀏覽器中是看不到的,webpy把這部分給filter了
7:到了控制流程部分了, 注意的面的i want這一句的縮排,要大於兩個空格,
你用tab按鍵一般不會有問題
$for i in range(10): i want eat $i apple(s) $ a=4$while a<10: $a $ a+=1$if a>10: hell $a$else: keep on ,you will do it一個for 在 html應用中的例子,這樣建立一個表<table>$for c in ["a", "b", "c", "d"]: <tr class="abc"> <td>$index</td> <td>$c</td> </tr></table>
8:其它一些有用的東西 如,$def
還可以在html中定義函數,這是多麼方便的東西
$def tr(value):<tr>$for i in value:<td>$i</td></tr>$def table(rows):<table>$for row in rows: $:row</table>$ data=[['a', 'b', 'c'], [1, 2, 3], [2, 4, 6], [3, 6, 9] ]$:table([tr(d) for d in data])
9:還有一個神奇的 關鍵字 code,所有的python代碼都可以寫在code 塊下面:
$code: x = "you can write any python code here" y = x.title() z = len(x + y) def limit(s, width=10): """limits a string to the given width""" if len(s) >= width: return s[:width] + "..." else: return s
回來到html
上面定義的變數在這裡也可以用,
例如
$limit(x)
10:var塊,這是個比較難懂的東東,看下面的代碼
在html中
$def with (title, body)$var title: $title$var content_type: text/html<div id="body">$body</div>
在python中
>>> out = render.page('hello', 'hello world')>>> out.titleu'hello'>>> out.content_typeu'text/html'>>> str(out)'\n\n<div>\nhello world\n</div>\n'
可以看到var關鍵字的作用是把在 html中定義的變數,傳回到python程式中,
python就可以根據這些內容做更多的處理,
11:在html檔案中可以訪問的builtin 函數 和變數 ,常用的函數都是
能訪問的,如max,min,range,
True,False也是能識別的,
與builtin對應的一個概念是具體應用程式的globals變數或是函數,
如何使用這些globals變數或是函數可以被所有的html templates訪問呢?
例子如下:
import webimport markdownglobals={"markdown":markdown.markdown}render=web.template.render("tempaltes",globals=globals)
這樣在所有的html檔案中都可以使用 makrdown這個函數了
感覺這個函數就像是builtin的一樣,
12:出於安全考慮,下面的命令不能在html模板中出現
import ,exec
訪問屬性時不能用 _開頭,
不能使用open,getattr,setattr這些函數
如果你的模板不小心用了上面的情況,會出現SecurityException 這個安全
異常
知道上面的事,你就可以在html中寫python了,