使用Google App Engines webapp框架,有没有办法将数据传递到基本模板? 具体来说,我只想在用户登录时看到注销按钮(使用googles自己的身份验证系统)。
我还在学习,所以我不确定哪些部分是GAE特定的,哪些部分是django特定的;必须从每个请求处理程序发送登录用户似乎非常干。
答案 0 :(得分:3)
通过传递给template.render,基本模板的参数与任何其他模板参数的传递方式相同。我通常通过在我的基本处理程序上使用方便方法来解决这个问题,该方法插入了常见的模板参数,如下所示:
class BaseHandler(webapp.RequestHandler):
def render_template(self, filename, template_args):
path = os.path.join(os.path.dirname(__file__), 'templates', filename)
template_args.update({
'user': users.get_current_user(),
# ...
})
class MyHandler(BaseHandler):
def get(self):
self.render_template('my.html', {'foo': 'bar'})
答案 1 :(得分:0)
我认为你正在寻找像login_required decorator in django这样的东西。您可以尝试使用完整的django framework in GAE(我从未尝试过),也可以使用decoration轻松自定义并添加自己的行为。在您的情况下,将用户的登录状态传递给模板引擎是个好主意。
#the decorator
def login_checked(f):
def wrap(request, *args, **kwargs):
# get current user
user = get_current_user()
template_path, vars = f(request, *args, **kwargs)
vars['user']= user
template.render(template_path, vars)
return wrap
# usage
class MyPage(webapp.RequestHandler):
@login_checked # add a decoration
def get(self):
# your page
return "the_template_page_you_want", {"the value you want to pass to template": "xxx"}
答案 2 :(得分:-2)
看一下这个例子:
from google.appengine.api import users
class MyHandler(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" %
(user.nickname(), users.create_logout_url("/")))
else:
greeting = ("<a href=\"%s\">Sign in or register</a>." %
users.create_login_url("/"))
self.response.out.write("<html><body>%s</body></html>" % greeting)
来源:http://code.google.com/appengine/docs/python/users/loginurls.html