2011-09-15 35 views
0

我在UserAdminPage中有一個表格,其中標籤按字母順序列出(代碼如下)。更改表格中標籤的顯示順序(Google App Engine-Python)

我想添加一個鏈接,將更改順序以日期。我知道我會將query.order(owner_tag")更改爲query.order("-date"),但是是否需要創建新的處理程序?

我不明白什麼鏈接應該是問號的地方。

感謝

class UserAdminPage(webapp.RequestHandler): 
    def get(self): 

... 

#-----------tags table-----------------# 
      query = Owner.all() 
      query.filter("owner =", user) 
      query.order("owner_tag") 
      w = query.fetch(500) 

      user_tag_list = [] 
      for item in w: 
       user_tag_list.append(item.owner_tag) 

      unique_tags = sorted(f1.f2(user_tag_list))     

#-----------holding table start--------# 
      self.response.out.write(""" 
      <table border="0" cellpadding="0" cellspacing="20" > 
      <tr> 
      <td>""") 

#-----------tags table start--------#         
      self.response.out.write("""<table border="1"> 
      <tr> 
      <th colspan="3">tags<br /> 
      #the link that will sort by most recent: 
      #<a href="?????">order tags by most recent</a></th> 
      </tr> 
      """)  

      for tag in unique_tags: 

       self.response.out.write(""" 
        <tr> 
        <td><a href="/tag?tag=%s">%s</a></td> 
        </tr> 
        """ % 
        (tag, tag) 
        ) 

      self.response.out.write("""</table>""") 

      #holding table first column end 
      self.response.out.write("""</td>""") 
      #holding table second column start 
      self.response.out.write("""<td style="vertical-align:top">""") 

更新的代碼AS PER KEVIN普的回答:

class UserAdminPage(webapp.RequestHandler): 
    def get(self): 
     order_by = self.request.get("order") 

... 

#-----------tags table-----------------# 
      query = Owner.all() 
      query.filter("owner =", user) 
      if not order_by: 
       query.order("owner_tag") 
      elif order_by == "date": 
       query.order("-date") 
      w = query.fetch(500) 

      user_tag_list = [] 
      for item in w: 
       user_tag_list.append(item.owner_tag) 

      unique_tags = f1.f2(user_tag_list) 

#-----------holding table start--------# 
      self.response.out.write(""" 
      <table border="0" cellpadding="0" cellspacing="20" > 
      <tr> 
      <td>""") 

#-----------tags table start--------#         
#   I put the link here but when I click on it, no table is drawn 
#   because the `for` block below draws the tag table 
#   so I don't understand how I can draw the table with `order=date` 

      self.response.out.write("""<table border="1"> 
      <tr> 
      <th colspan="3">tags<br /> 
      <a href="/tag?order=date"><span id=small>most recent</span></a></th> 
      </tr> 
      """)  

      for tag in unique_tags: 

       self.response.out.write(""" 
        <tr> 
        <td><a href="/tag?tag=%s">%s</a></td> 
        </tr> 
        """ % 
        (tag, tag) 
        ) 

      self.response.out.write("""</table>""") 

... 

回答

3

有許多的方法來優化你的方法來此,但回答您的具體問題 - 而比複製您的處理程序,你可以添加一個GET參數的鏈接,然後檢查,同時構建您的查詢:

class UserAdminPage(webapp.RequestHandler): 
    def get(self): 
     order_by = self.request.get('order') 

     query = Owner.all() 
     query.filter("owner =", user) 
     if not order_by: 
      query.order("owner_tag") 
     elif order_by == 'date': 
      query.order("-date") 

     ... 
     <a href="your_page_url?order=date">order tags by most recent</a> 
+0

感謝您的回答。我更新了代碼並添加了問題。我不明白這應該如何工作,所以我認爲我沒有把鏈接放在應該的位置。當我點擊它時,標籤表沒有被繪製。換句話說,我仍然不明白如何在日期排序的頁面中包含「for」循環。再次感謝。 – Zeynel

+0

'/ tag'是你網頁的網址(即UserAdminPage)嗎?這裏的目標是通過添加參數重新發起對頁面的請求。 for循環將按照他們排序的順序迭代你的結果。 –

+0

好的,我將它更改爲/ useradminpage,現在它的工作原理。但它只適用於如果兩個「日期」參數都寫入這樣的減號:'elif order_by ==「-date」:query.order(「 - date」)'否則我得到一個'PropertyError:無效的屬性名稱' date'。你知道爲什麼嗎?將最新的標籤放在最上面會很好。謝謝 – Zeynel