2011-01-23 4 views
1

У меня вопрос, похожий на мой previous question.Лучший способ перенаправления на страницу ссылки

В том же приложении у меня есть VoteHandler, который добавляет +1, когда пользователи нажимают на стрелку вверх, а затем перенаправляются на ту же страницу.

Теперь, когда я добавил параметры URL для страниц и веб-сайты выглядят как этот

/dir?type=tshirt 

мне нужно, чтобы иметь возможность переадресовывать на нужную страницу.

И как упоминалось here от Nick Johnson referrer не является хорошим способом перенаправления.

Я хотел бы получить помощь в том, как исправить VoteHandler так, чтобы он перенаправлялся на правильную страницу.

Спасибо!

class VoteHandler(webapp.RequestHandler): 
    def get(self, id): 
     id = int(id) 
     item = Item.get_by_id(id) 

     user = users.get_current_user() 

     if user: 
      greeting = ("%s (<a href='%s'>sign out</a>)" % 
          (user.nickname(), users.create_logout_url(self.request.uri))) 

      #--check if user voted on this item before--# 
      query = SiteUser.all() 
      query.filter("liked_items =", (str(item.key().id()))) 
      already_voted = query.get() 

      if already_voted: 
       self.redirect("/onevote") 
      else: 
       query = SiteUser.all()   
       query.filter("site_user =", users.get_current_user()) 

       data = query.get() 

       data.total_votes += 1 
       data.liked_items = str(item.key().id()) 
       data.site_user = users.get_current_user() 

       db.put(data) 

       item.points += 1 
       item.put()    

       if self.request.referrer == 'http://localhost:8083//newest': 
        self.redirect('/newest') 
       elif self.request.referrer == 'http://localhost:8083/hot': 
        self.redirect('/hot') 
       #How do I fix this line to get the correct url parameter? 
       elif self.request.referrer == 'http://localhost:8083/dir?type=tshirt': 
        self.redirect('/dir/tshirt')  
       else:  
        self.redirect("/")      
     else:    
      greeting = ("<a href='%s'>Sign in with your Google account or register</a>." % 
          cgi.escape(users.create_login_url(self.request.uri))) 

UPDATE

answer by systempuntoout отлично работает, но мне пришлось изменить ссылку голосов в Directory от

/vote/%s 

в

/vote/%s?type=%s 

так, чтобы я мог получить merchandise_type в VoteHandler:

self.response.out.write("<ol>") 
for item in items: 
    self.response.out.write("""<li> 
            <a href="/vote/%s?type=%s">^</a><a href="%s">%s</a> <span id='Small'>(%s)</span><br /> 
            <div id='Small'> 
            %s points %s by %s <a href="/item/%s"></a> | 
            <a href="/item/%s#disqus_thread"></a> 
            </div> 
           </li><br /> """ % 
            (str(item.key().id()), merchandise_type, item.url, item.title, urlparse(item.url).netloc, 
            item.points, item.date.strftime("%B %d, %Y %I:%M%p"), item.user_who_liked_this_item, str(item.key().id()), str(item.key().id())))        

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

ответ

2

Я хотел бы использовать параметр type таким образом:

class VoteHandler(webapp.RequestHandler): 
    def get(self, id): 
     id = int(id) 
     item = Item.get_by_id(id) 
     merchandise_type = self.request.get("type", "") 
     .. 
     self.redirect('/%s' % merchandise_type) 
+0

Спасибо за ваш ответ. Он отлично работает. Но мне пришлось добавить «merchandise_type», чтобы проголосовать за ссылку в обработчике «Directory», иначе я не смог бы получить тип в «VoteHandler». Я установил обновление для записи. Еще раз спасибо. – Zeynel

Смежные вопросы