2011-09-15 33 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