国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞

2020-01-04 18:01:20
字體:
供稿:網(wǎng)友

這篇文章主要介紹了剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下

分析直至另一個模板標(biāo)簽

模板標(biāo)簽可以像包含其它標(biāo)簽的塊一樣工作(想想 {% if %} 、 {% for %} 等)。 要創(chuàng)建一個這樣的模板標(biāo)簽,在你的編譯函數(shù)中使用 parser.parse() 。

標(biāo)準(zhǔn)的 {% comment %} 標(biāo)簽是這樣實現(xiàn)的:

 

 
  1. def do_comment(parser, token): 
  2. nodelist = parser.parse(('endcomment',)) 
  3. parser.delete_first_token() 
  4. return CommentNode() 
  5.  
  6. class CommentNode(template.Node): 
  7. def render(self, context): 
  8. return '' 

parser.parse() 接收一個包含了需要分析的模板標(biāo)簽名的元組作為參數(shù)。 它返回一個django.template.NodeList實例,它是一個包含了所有Node對象的列表,這些對象是解析器在解析到任一元組中指定的標(biāo)簽之前遇到的內(nèi)容.

因此在前面的例子中, nodelist 是在 {% comment %} 和 {% endcomment %} 之間所有節(jié)點的列表,不包括 {% comment %} 和 {% endcomment %} 自身。

在 parser.parse() 被調(diào)用之后,分析器還沒有清除 {% endcomment %} 標(biāo)簽,因此代碼需要顯式地調(diào)用 parser.delete_first_token() 來防止該標(biāo)簽被處理兩次。

之后 CommentNode.render() 只是簡單地返回一個空字符串。 在 {% comment %} 和 {% endcomment %} 之間的所有內(nèi)容都被忽略。

分析直至另外一個模板標(biāo)簽并保存內(nèi)容

在前一個例子中, do_comment() 拋棄了{(lán)% comment %} 和 {% endcomment %} 之間的所有內(nèi)容。當(dāng)然也可以修改和利用下標(biāo)簽之間的這些內(nèi)容。

例如,這個自定義模板標(biāo)簽{% upper %},它會把它自己和{% endupper %}之間的內(nèi)容變成大寫:

 

 
  1. {% upper %} 
  2. This will appear in uppercase, {{ user_name }}. 
  3. {% endupper %} 

就像前面的例子一樣,我們將使用 parser.parse() 。這次,我們將產(chǎn)生的 nodelist 傳遞給 Node :

 

 
  1. def do_upper(parser, token): 
  2. nodelist = parser.parse(('endupper',)) 
  3. parser.delete_first_token() 
  4. return UpperNode(nodelist) 
  5.  
  6. class UpperNode(template.Node): 
  7. def __init__(self, nodelist): 
  8. self.nodelist = nodelist 
  9.  
  10. def render(self, context): 
  11. output = self.nodelist.render(context) 
  12. return output.upper() 

這里唯一的一個新概念是 UpperNode.render() 中的 self.nodelist.render(context) 。它對節(jié)點列表中的每個 Node 簡單的調(diào)用 render() 。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洱源县| 靖州| 策勒县| 道孚县| 安宁市| 宜阳县| 邻水| 桦甸市| 绥芬河市| 句容市| 会宁县| 绥中县| 松阳县| 南丹县| 宿松县| 呼图壁县| 隆化县| 平和县| 永平县| 札达县| 肥乡县| 木兰县| 漳州市| 铁岭县| 玛纳斯县| 上饶市| 盱眙县| 吉林市| 横山县| 贡嘎县| 汶上县| 杂多县| 新化县| 余江县| 屏东县| 上栗县| 博爱县| 北辰区| 澜沧| 太保市| 丹巴县|