Как отфильтровать все выбранные параметры? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть 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 Ответ

3 голосов
/ 04 февраля 2011

Создайте список tags всех опций, отфильтруйте все невыбранные (см. Лямбду) и проверьте, является ли полученный список пустым или нет.

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""")
...