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

首頁 > 編程 > Python > 正文

在Python的Django框架中調用方法和處理無效變量

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

這篇文章主要介紹了在Python的Django框架中調用方法和處理無效變量的方法,是Django編程中的基礎操作,需要的朋友可以參考下

方法調用行為

方法調用比其他類型的查找略為復雜一點。 以下是一些注意事項:

在方法查找過程中,如果某方法拋出一個異常,除非該異常有一個 silent_variable_failure 屬性并且值為 True ,否則的話它將被傳播。如果異常被傳播,模板里的指定變量會被置為空字符串,比如:

 

 
  1. >>> t = Template("My name is {{ person.first_name }}."
  2. >>> class PersonClass3: 
  3. ... def first_name(self): 
  4. ... raise AssertionError, "foo" 
  5. >>> p = PersonClass3() 
  6. >>> t.render(Context({"person": p})) 
  7. Traceback (most recent call last): 
  8. ... 
  9. AssertionError: foo 
  10.  
  11. >>> class SilentAssertionError(AssertionError): 
  12. ... silent_variable_failure = True 
  13. >>> class PersonClass4: 
  14. ... def first_name(self): 
  15. ... raise SilentAssertionError 
  16. >>> p = PersonClass4() 
  17. >>> t.render(Context({"person": p})) 
  18. u'My name is .' 

僅在方法無需傳入參數時,其調用才有效。 否則,系統將會轉移到下一個查找類型(列表索引查找)。

顯然,有些方法是有副作用的,好的情況下允許模板系統訪問它們可能只是干件蠢事,壞的情況下甚至會引發安全漏洞。

例如,你的一個 BankAccount 對象有一個 delete() 方法。 如果某個模板中包含了像 {{ account.delete }}這樣的標簽,其中`` account`` 又是BankAccount 的一個實例,請注意在這個模板載入時,account對象將被刪除。

要防止這樣的事情發生,必須設置該方法的 alters_data 函數屬性:

 

 
  1. def delete(self): 
  2. # Delete the account 
  3. delete.alters_data = True 

模板系統不會執行任何以該方式進行標記的方法。 接上面的例子,如果模板文件里包含了 {{ account.delete }} ,對象又具有 delete()方法,而且delete() 有alters_data=True這個屬性,那么在模板載入時, delete()方法將不會被執行。 它將靜靜地錯誤退出。

如何處理無效變量

默認情況下,如果一個變量不存在,模板系統會把它展示為空字符串,不做任何事情來表示失敗。 例如:

 

 
  1. >>> from django.template import Template, Context 
  2. >>> t = Template('Your name is {{ name }}.'
  3. >>> t.render(Context()) 
  4. u'Your name is .' 
  5. >>> t.render(Context({'var''hello'})) 
  6. u'Your name is .' 
  7. >>> t.render(Context({'NAME''hello'})) 
  8. u'Your name is .' 
  9. >>> t.render(Context({'Name''hello'})) 
  10. u'Your name is .' 

系統靜悄悄地表示失敗,而不是引發一個異常,因為這通常是人為錯誤造成的。 這種情況下,因為變量名有錯誤的狀況或名稱, 所有的查詢都會失敗。 現實世界中,對于一個web站點來說,如果僅僅因為一個小的模板語法錯誤而造成無法訪問,這是不可接受的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博客| 义乌市| 修武县| 舒兰市| 潍坊市| 三原县| 安乡县| 壤塘县| 陈巴尔虎旗| 阿克陶县| 公安县| 安塞县| 清河县| 嘉荫县| 韶关市| 赞皇县| 额尔古纳市| 汶川县| 灌阳县| 阆中市| 磐安县| 措美县| 天门市| 外汇| 察雅县| 曲阳县| 宣城市| 武川县| 土默特右旗| 曲水县| 石林| 曲水县| 贵德县| 博罗县| 泰宁县| 庐江县| 习水县| 宜宾县| 天祝| 大安市| 中方县|