在html中寫python代碼的文法和特點-----基於webpy的http伺服器

來源:互聯網
上載者:User

在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了,



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.