2013-03-20 42 views
0

我是Google App引擎的初學者,並試圖通過Google App HelloWorld應用。重定向網址在使用templates時不起作用。無法在Google應用中獲取重定向工作引擎

self.redirect('/?'+urllib.urlencode({'guestbook_name':guestbook_name})) 

它重定向,但應該顯示在urlbar準確URL像

http://localhost:8080/?guestbook_name=some_name 

,而它顯示像

http://localhost:8080/?guestbook_name= 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     guestbook_name=self.request.get('guestbook_name') 
     greetings_query = Greeting.all().ancestor(
      guestbook_key(guestbook_name)).order('-date') 
     greetings = greetings_query.fetch(10) 

     if users.get_current_user(): 
      url = users.create_logout_url(self.request.uri) 
      url_linktext = 'Logout' 
     else: 
      url = users.create_login_url(self.request.uri) 
      url_linktext = 'Login' 

     template_values = { 
      'greetings': greetings, 
      'url': url, 
      'url_linktext': url_linktext, 
     } 

     template = jinja_environment.get_template('index.html') 
     self.response.out.write(template.render(template_values)) 

class Guestbook(webapp2.RequestHandler): 
    def post(self): 

     guestbook_name = self.request.get('guestbook_name') 
     greeting = Greeting(parent=guestbook_key(guestbook_name)) 

     if users.get_current_user(): 
     greeting.author = users.get_current_user().nickname() 

     greeting.content = self.request.get('content') 
     greeting.put() 
     self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name})) 

index.html文件貌似

<html> 
    <body> 
    {% for greeting in greetings %} 
     {% if greeting.author %} 
     <b>{{ greeting.author }}</b> wrote: 
     {% else %} 
     An anonymous person wrote: 
     {% endif %} 
    <blockquote>{{ greeting.content|escape }}</blockquote> 
    {% endfor %} 

<form action="/sign" method="post"> 
    <div><textarea name="content" rows="3" cols="60"></textarea></div> 
    <div><input type="submit" value="Sign Guestbook"></div> 
</form> 

<a href="{{ url }}">{{ url_linktext }}</a> 

    </body> 
</html> 
+0

你使用'redirect url在使用模板時不起作用是什麼意思? – aschmid00 2013-03-20 21:42:33

+0

我已經更新了代碼,我無法在您更新的問題中使用它 – vaibhav1312 2013-03-20 21:53:58

+0

仍然沒有任何關於您所問的問題。你在哪裏使用'self.redirect'? 「urllib.urlencode」的部分在哪裏? – aschmid00 2013-03-20 22:00:20

回答

2

看來你guestbook_name是''(emp ty字符串)

+0

沒有它沒有我在瀏覽器中顯示它 – vaibhav1312 2013-03-20 21:54:56

1

在您的index.html中沒有設置留言簿名稱的輸入。對於空鍵,webapp2會返回一個空字符串self.request.get('key_name')而不是您所期望的。您可以通過查看數據存儲區來查看,所有存儲的問候語都將有一個空的guestbook_name。

要獲得guestbook_name get方法設置你的模板值

template_values = { 
    'greetings': greetings, 
    'guestbook_name': guestbook_name, 
    'url': url, 
    'url_linktext': url_linktext, 
} 

,並在您的index.html

<form action="/sign" method="post"> 
    <div><textarea name="content" rows="3" cols="60"></textarea></div> 
    <div><input type="hidden" name="guestbook_name" value="{{guestbook_name}}"></div> 
    <div><input type="submit" value="Sign Guestbook"></div> 
</form> 

將在guestbook_name添加到您的POST發送數據,所以你將能夠在你的處理程序中使用它。

0

我在嘗試gae時遇到類似問題,官方網站https://developers.google.com/appengine/docs/python/gettingstartedpython27/templates已改變相關代碼,就像Anthony在他的帖子中提到的一樣。 但這裏有一些問題太:

  1. 在類的MainPage變量template_values,guestbook_nameurllib.urlencode編碼,因爲該功能需要一個字典或元組作爲一個變量 而不是字符串,urllib的將失敗。應該用quote_plus代替。
  2. index.html中的兩個表單共享相同的編碼變量guestbook_name,如果您的語言不是英文,那麼這不是很漂亮,在這種情況下,某些%2F類似字符串會出現在內容中,所以我的解決方案會發送一個額外的非編碼爲guestbook_name第二種形式。
相關問題