Как я могу передать данные в базовый шаблон GAE? - PullRequest
3 голосов
/ 20 июля 2011

Используя каркас веб-приложения Google App Engines, есть ли способ передать данные в базовый шаблон?
Если говорить точнее, я просто хочу, чтобы кнопка выхода из системы была видна, если пользователь вошел в систему (используя собственную систему аутентификации googles).).

Я все еще учусь, поэтому я не уверен, какие части специфичны для GAE, а какие - для django;необходимость посылать зарегистрированного пользователя от каждого отдельного обработчика запроса кажется очень СУХОЙ.

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Аргументы в базовые шаблоны передаются так же, как и любые другие аргументы шаблона, передаваясь в 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'})
0 голосов
/ 20 июля 2011

Взгляните на этот пример:

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

0 голосов
/ 20 июля 2011

Я думаю, вы ищете что-то вроде login_required декоратор в django .Вы можете либо попытаться использовать полную инфраструктуру django в GAE (я никогда не пробовал), либо ее можно легко настроить с помощью художественное оформление и добавить свое собственное поведение.В вашем случае будет хорошей идеей передать статус входа пользователя в движок шаблонов.

#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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...