2013-03-20 43 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第二种形式。
相关问题