歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Zope:DTML中變量的處理

Zope:DTML中變量的處理

日期:2017/2/27 14:18:58   编辑:更多Linux
  1.變量是否存在 在我制作“翻譯與評論”頁面的時候,我有一個問題,就是“如何判斷變量是否存在?”為什麼會有這個問題呢?因為,我需要根據這個變量是否存在來決定顯示或不顯示某些信息。那麼在PHP中我可以使用isset()函數,而在Zope中如何做呢?好象沒有這樣的函數。這個問題困擾了我幾天,在我詳細閱讀了Zope在線Help中關於dtml-if的說明之後,終於清楚了。原文是這樣的: The if tag is a block tag. The if tag and optional elif tags take a condition variable name or a condition eXPression, but not both. If the condition name or expression evaluates to true then the if block is executed. True means not zero, an empty string or an empty list. If the condition variable is not found then the condition is considered false. 意思是說:“if 標簽是一個塊標簽。if標簽與可選的elif標簽使用一個條件變量名或一個條件表達式,但不能同時使用。如果條件名或表達式計算為ture那麼if塊被執行。Ture表示非0,非空串或非空列。如果條件變量沒有找到那麼條件被認為false。 有了這個說明,我明白了,只要使用< dtml-if var >就可以知道變量是否有效了。當然,你也可以說如果它為0呢?當然如果有類似的情況,我們可以考慮把變量的取值設定為非0值即可,這樣不應該出現值為空值的情況。 2.生成新變量 DTML Document和DTML Method中可以使用DTML語言進行簡單的編程。在編程過程中我們可能需要生成一些變量,那麼使用< dtml-let >就可以了。變量作為屬性名,等號後面是取值,可以是表達式。要注意它是一個塊語句,因此生成新的變量後一定要在結束前使用,否則就失效了。例如: < dtml-let a="'all'"> < dtml-var a > < /dtml-let > 這樣我們定義了一個變量a,它是一個字符串,因此要用引號引起來。這裡雙引號表示屬性值,其包含的內容才是真正的值。用雙引號是符合Html文檔的要求。因此,如果只寫a="all"那麼表示a的值為變量all的值,而不是'all'。所以正確的寫法應該是a="'all'"。 3.名字空間 關於這一點我還沒有仔細地了解,因此只能講一些體會。名字空間是你所使用的環境,它記錄著你所能使用的所有的方法和變量。對於Zope來說,名字空間是一個棧的結構,它依據搜索對象的路徑依次入棧。當調用一個變量或方法時,首先在棧頂的名字空間進行查找,如果沒有找到,則向下查找,直到棧底。因此,最上面你所使用的名字空間應該是調用的對象。DTML Document是一個Zope對象,它具有自已的名字空間。因此在調用一個DTML Document時,Zope會首先在這個DTML Document中進行查找,然後再向下查找。而對於DTML Method就不同了,它使用調用者的名字空間。那麼哪個是它的調用者呢?應該是它是上一個對象。可能是一個DTML Document或是一個容器如Folder。由於有這樣的區別,因此我們在使用這兩者時應特別注意。 4.變量的位置 因為在Zope中存在不同的名字空間,這樣就可能在不同的名字空間存在相同的變量名。而Zope在搜索一個變量時先找最上層的名字空間,那麼對於 REQUEST對象來說,它位於棧的下端,所以如果在某個上層對象存在一個與REQUEST中相同的變量時,我們首先得到的是上層對象的變量,那麼有時我們想要的是REQUEST中的cookie值,如果才可以得到呢?一種通過限定,如< dtml-var expr="REQUEST.cookies['username']" >另一種方法是使用< dtml-with >標簽。它可以將指定的對象名字空間提升到最前。如:< dtml-with REQUEST >。如果我們在後面加入only屬性則表示,只在REQUEST名字空間中進行搜索而不搜索別的空間了。在這裡,我有一些對”對象的屬性與方法 “和”名字空間“混淆了,但有時它們是一樣的。 5.REQUEST和RESPONSE Zope定義了兩個有趣的對象,REQUEST和RESPONSE。是不是象ASP中的東東。REQUEST存放上傳時的html信息,如 cookie,form變量,CGI環境變量,及其它一些信息。RESPONSE則是應答。如回傳的信息,頭信息,設置cookie信息等等。有一點要注意,Zope不象PHP,它是全部處理正確後才可以返回,因此不象PHP中對於cookie的輸出要放在所有其它的輸出之前,而是可以放在任何位置。這一點非常方便。


[1]



Copyright © Linux教程網 All Rights Reserved