App Engine Python:模板无法正确呈现

时间:2012-03-05 22:32:10

标签: python google-app-engine django-templates

我不明白此代码渲染页面可能出现的问题。

def post(self):
        acct = self.request.get('account')
        pw = self.request.get('password')

        que = db.Query(User)
        que = que.filter('account =', acct)
        que = que.filter('password =', pw)
        results = que.fetch(limit = 1)

        values = { }
        newval = dict(values)
        newval['path'] = self.request.path

        if len(results) > 0:
            path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm')
            self.response.out.write(template.render(path, {}))

我是通过位于名为" loginscreen.htm" 的网页上的登录表单来调用的。 当应用程序到达代码的这一部分时:

if len(results) > 0:
    path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm')
    self.response.out.write(template.render(path, {}))

并尝试重定向到' sites.htm' ,页面' sites.htm'正确显示但在地址栏中仍然显示:

' http:// localhost:8080 / login' (" / login"路由传入请求来自" loginscreen.htm" )' http:// localhost:8080 / sites.htm' 应该 改为显示。

这个问题的主要问题是,如果我重新加载页面,会出现"确认表单重新提交" 对话框,允许用户再次提交表单。 但如果我更换

path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm')
self.response.out.write(template.render(path, {}))

通过

self.redirect('sites.htm') 

地址栏正确显示' http:// localhost:8080 / sites.htm'

那么代码有什么问题?

很抱歉,如果我让这个问题听起来比应该的更复杂。

提前致谢!

1 个答案:

答案 0 :(得分:4)

你的问题是一个误解:

  

从位于名为“loginscreen.htm”的页面上的登录表单中调用它。   当应用程序到达代码的这一部分时:

if len(results) > 0:
    path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm')
    self.response.out.write(template.render(path, {}))
  

并尝试重定向到'sites.htm',页面'sites.htm'是   正确显示但在地址栏中仍然显示:

该代码不执行任何类似重定向的操作 - 它只是通过在sites.htm呈现模板以响应POST请求,告诉AppEngine响应该登录尝试。如果要重定向,则需要明确地执行此操作(因为您似乎已经尝试过)。