亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python下如何讓web元素的生成更簡單的分析

2020-01-04 18:06:50
字體:
來源:轉載
供稿:網友

做web不簡單,特別是當你需要使用一些web效果的時候, 比如顯示個圓角矩形,提示框之類的,也許你認為很簡單,好讓我們分析一下:

1.引用css。這可能是最常見的做法了,對一些特定的元素定義特定的樣式。那么使用它,你需要在HTML

頁面中加入

標簽。

2.引入js。許多特效也可以通過javascript來進行處理,比如動態顯示效果,或對元素進行封裝。使用

它你需要在HTML頁面加入標簽,必要時還要加一些javascript代碼。

 

3.HTML元素。需要設定一些特殊的屬性,比如class=某個屬性。這塊還相對簡單。

 

因此從上面的分析可以看出,在通常情況下,加入一個好看的web元素可能到許多地方的修改。因此我一

 

直在思考如何讓這個過程可以更簡化,麻煩的地方就是如何處理這些資源,如何讓這些資源可以與原始的

 

HTML很好的結合呢?最終我想出的辦法就是:代碼組裝。

 

對于css,javascript鏈接和代碼,它們可以按調用的順序依次拼成一段文本,然后插入到元素前

 

面。然后對于html代碼,在模板中直接輸出。對于css,javascript的鏈接可以檢查是否重復。

 

那么如何定義web元素類和如何在模板中對其進行處理?

 

一個web元素類定義如下:

 

classSnippet(object):

 

css=''

 

csslink=''

 

jslink=''

 

html=''

 

js=''

 

defrender(self):

 

return''

 

def__str__(self):

 

returnself.render()

 

定義為類屬性的將輸出到HTML的頭部,而render()的結果將顯示在模板中調用類的地方。先看一下在模板

 

中調用的示例:

 

 

 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

 

 

 

 

 

 

 

{{

htmlbuf<

}}

這里你可以看到htmlbuf,它是什么,它就是用來采集每個Snippet類的類屬性的。這里使用<<來將一個

Snippet對象加到htmlbuf中去。同時它還會將Snippet的HTML代碼在調用位置輸出。

如何輸出?首先uliweb的模板將轉為python代碼,它有一個內置的out對象,可以調用它的方法來輸出

HTML代碼。那么htmlbuf對象將在調用模板前被創建,在調用模板后被處理,在創建時將傳入out的write

屬性。這一切都是在SImpleFrame.py中通過plugin方法來實現的,但是這只是定義了一個調用點,如:

fname,code=template.render_file(filename,vars,env,dirs)

out=template.Out()

template._prepare_run(vars,env,out)

callplugin(self,'before_render_template',env,out)

ifisinstance(code,(str,unicode)):

code=compile(code,fname,'exec')

execcodeinenv,vars

text=out.getvalue()

output=execplugin(self,'after_render_template',text,vars,env)

before_render_template會在調用模板前被調用。after_render_template會在調用模板后被調用。因

此你可以通過plugin機制來加入額外的處理。這是在settings.py中定義的,如:

@plugin('before_render_template')

defbefore_render_template(sender,env,out):

fromuliweb.coreimportjs

fromuliweb.core.SimpleFrameimporturl_for

fromuliweb.helpersimporthtmlwidgets

htmlbuf=js.HtmlBuf(write=out.noescape,static_suffix=url_for('Portal.views.static',

filename=''))

env['htmlbuf']=htmlbuf

env['htmlwidgets']=htmlwidgets

這里注入htmlbuf和htmlwidgets到模板的env環境中,所以可以在模板中直接使用。在htmlwidgets中已經

定義了一些Snippet。htmlbuf在創建時,會使用out.noescape方法,它將不會對Snippet中的代碼進行轉

義。static_suffix表示靜態文件的前綴,缺省為/static/,這里由于使用了靜態服務,所以通過url_for

來得到靜態URL前綴。

@plugin('after_render_template')

defafter_render_template(sender,text,vars,env):

importre

r_links=re.compile(']|

(.*?)["/s>]',re.I)

if'htmlbuf'inenv:

htmlbuf=env['htmlbuf']

ifhtmlbuf.modified:

b=re.search('(?i)',text)

ifb:

pos=b.start()

#findlinks

links=[xoryforx,yinr_links.findall(text[:pos])]

htmlbuf.remove_links(links)

t=htmlbuf.render()

ift:

return''.join([text[:pos],t,text[pos:]])

else:

returnt+text

returntext

這里將在模板處理完畢后查找生成的HTML文本中的標簽,然后將相應的信息插入到它的前面。同

時這里增加了對原HTML中已經存在的鏈接進行了判斷,如果存在則刪除之,這是通過remove_links來處理

的。

經過這些的處理,你只要定義一個Snippet,Uliweb將自動為你處理css,js的鏈接包括代碼,和HTML代碼

的生成。因此你就可以簡單的:

{{

htmlbuf<

}}

來生成一個消息的提示信息。

我會慢慢擴展這個htmlwidgets庫。

再簡單描述一下如何配置:

1.在settings.py中

INSTALLED_APPS=['Documents','Examples','Portal','Post',

'uliweb.builtins.auth','uliweb.helpers.htmlwidgets']

這里要加入'uliweb.helpers.htmlwidgets',讓static目錄生效

2.加入:

@plugin('before_render_template')

defbefore_render_template(sender,env,out):

@plugin('after_render_template')

defafter_render_template(sender,text,vars,env):

3.可以使用了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美人与性动交| 欧美精品videos| 成人写真视频福利网| 另类视频在线观看| 亚洲天堂av图片| 日本精品久久久久久久| 日韩精品有码在线观看| 欧美日韩精品在线视频| 欧美精品九九久久| 亚洲老头同性xxxxx| 日韩欧美成人网| 午夜精品99久久免费| 欧美国产视频一区二区| 国产精品丝袜高跟| 亚洲欧美国产va在线影院| 亚洲人成伊人成综合网久久久| 亚洲a一级视频| 亚洲天堂色网站| 欧美成人免费网| 91高潮精品免费porn| 麻豆国产va免费精品高清在线| 日韩电影中文字幕av| 青青草原成人在线视频| 久久精品视频中文字幕| 91亚洲va在线va天堂va国| 亚洲伊人第一页| 97国产在线视频| 精品国产一区久久久| 欧美精品在线视频观看| 欧美精品生活片| 琪琪亚洲精品午夜在线| 日韩精品视频中文在线观看| 国产一区二区激情| 91免费视频网站| 欧美激情精品久久久久| 第一福利永久视频精品| 欧美大片在线看免费观看| 日韩视频在线免费| 日韩在线精品一区| 亚洲男人天堂2019| 亚洲人成网站999久久久综合| 1769国内精品视频在线播放| 久久国产精品久久精品| 裸体女人亚洲精品一区| 97视频在线观看视频免费视频| 国产精品国语对白| 欧美激情一二区| 欧美亚洲在线播放| 午夜精品蜜臀一区二区三区免费| 精品国产一区二区三区久久久狼| 久久精品视频亚洲| 久久久久久久久国产精品| 国产女精品视频网站免费| 美女扒开尿口让男人操亚洲视频网站| 日韩视频亚洲视频| 日本精品久久中文字幕佐佐木| 黑人与娇小精品av专区| 日韩电影网在线| 国产成人综合一区二区三区| 日韩av免费一区| 久久97精品久久久久久久不卡| 国产在线一区二区三区| 欧美精品18videos性欧| 亚洲精品久久久久久久久久久| 有码中文亚洲精品| 精品国产一区久久久| 日韩精品在线免费观看视频| 亚洲人成啪啪网站| 欧美性xxxxx极品| 国产自产女人91一区在线观看| 97在线视频一区| 在线播放国产精品| 亚洲人成伊人成综合网久久久| 久久69精品久久久久久久电影好| 国产免费一区视频观看免费| 久久视频免费观看| 欧美有码在线视频| 亚洲女人被黑人巨大进入al| 国产精品pans私拍| 国产91网红主播在线观看| 欧美日本啪啪无遮挡网站| 操人视频在线观看欧美| 51精品国产黑色丝袜高跟鞋| 国产婷婷成人久久av免费高清| 久久精品国产清自在天天线| 秋霞av国产精品一区| 欧美综合第一页| 欧美最顶级丰满的aⅴ艳星| 欧美日韩国产综合视频在线观看中文| 国语自产偷拍精品视频偷| 日韩一区二区精品视频| 国产一区二区三区视频免费| 国产欧亚日韩视频| 国产成人精品最新| 亚洲精品久久久久久下一站| 精品中文视频在线| 日韩在线免费视频观看| 亚洲xxxxx| 国产一区二区三区久久精品| 日本在线精品视频| zzijzzij亚洲日本成熟少妇| 欧美一级淫片丝袜脚交| 日韩精品极品毛片系列视频| 中文字幕久久久av一区| 亚洲国产欧美一区二区丝袜黑人| 欧美综合在线第二页| 欧美黑人性生活视频| 日韩经典一区二区三区| 亚洲а∨天堂久久精品喷水| 国产欧美欧洲在线观看| 欧美日韩亚洲精品一区二区三区| 色综合色综合久久综合频道88| 日韩美女在线观看一区| 精品自拍视频在线观看| 日韩在线中文字| 欧美久久精品一级黑人c片| 久久精品在线播放| 亚洲曰本av电影| 欧美极品少妇全裸体| 一区二区在线视频| 久久在线观看视频| 欧美国产日韩精品| 欧美日韩国产专区| 精品福利一区二区| 青草青草久热精品视频在线网站| 自拍视频国产精品| 国产精品一区二区三区毛片淫片| 亚洲free性xxxx护士白浆| 欧美高清视频免费观看| 久久中文精品视频| 性欧美办公室18xxxxhd| 国产中文字幕日韩| 日韩中文字幕免费视频| 欧美色另类天堂2015| 精品国产老师黑色丝袜高跟鞋| 91精品国产91久久久久福利| 一本色道久久综合狠狠躁篇怎么玩| 草民午夜欧美限制a级福利片| 亚洲美女激情视频| 亚洲日韩欧美视频一区| 欧美极度另类性三渗透| 久久久免费电影| 日本精品久久久久久久| 精品国产鲁一鲁一区二区张丽| 日韩激情视频在线播放| 羞羞色国产精品| 国模gogo一区二区大胆私拍| 欧美国产第一页| 亚洲一品av免费观看| 欧美性猛交xxxx黑人| 亚洲国产精品久久久久秋霞蜜臀| 精品国产91久久久久久老师| 91精品视频网站| 欧美另类99xxxxx| 亚洲欧洲日产国码av系列天堂| 亚洲qvod图片区电影| 日韩欧美在线视频日韩欧美在线视频| 久久夜色精品国产欧美乱| 日韩精品免费观看| 亚洲视频电影图片偷拍一区| 欧美成人免费在线观看| 一区二区欧美在线| 亚洲毛片一区二区| 日韩精品福利在线|