2011-02-04 72 views
0

我從下拉menues這5個選項:如何篩選所有選項?

<select name="image_style"> 
<select name="image_background"> 
<select name="image_activity"> 
<select name="image_merchandise"> 
<select name="image_type"> 

我希望所有選擇的進行過濾。我試試這個:

image_background = self.request.get("image_background") 
image_activity = self.request.get("image_activity") 
image_merchandise = self.request.get("image_merchandise") 
image_type = self.request.get("image_type") 

items = Image.all() 

if image_style != "None": 
    items.filter("image_tags =", image_style) 
elif image_background != "None": 
    items.filter("image_tags =", image_background) 
elif image_activity != "None": 
    items.filter("image_tags =", image_activity) 
elif image_merchandise != "None": 
    items.filter("image_tags =", image_merchandise) 
elif image_type != "None": 
    items.filter("image_tags =", image_type) 
else: 
    self.response.out.write(""" select tags to sort images""") 

for item in items:        
    self.response.out.write(""" 
    <a href="%s"><image src="%s" height="110"> </a> """ % 
    (item.image_url, item.image_source_url)) 

但在這種情況下,如果image_style不是"None"其它過濾器將不會執行。我如何制定這個方案以便執行所有選擇。謝謝。

+1

你必須用if替換所有`elif` if – rubik 2011-02-04 15:30:27

+0

@rubik:好的。但是在這種情況下,總是執行`else`,並且``item:...'行中的`item永遠不會被執行。有什麼建議麼?謝謝。 – Zeynel 2011-02-04 15:33:58

回答

3

建立一個列表tags的所有選項,過濾掉所有未選中的(請參閱lambda)並檢查結果列表是否爲空。

selects = filter(lambda x: x != "None", 
       [image_style, image_background, image_activity, 
       image_merchandise, image_type] 
     ) 

if selects: 
    for choice in selects: 
     items.filter("image_tags =", choice) 
else: 
    self.response.out.write(""" select tags to sort images""")