Как передать значения шаблонов при перенаправлении? - PullRequest
1 голос
/ 25 августа 2011

Я использую обработчик blobstoreuploadhandler и, следовательно, должен возвращать self.redirect, но мне нужно передать значения в мой шаблон. Как мне это сделать? Если я не могу использовать значения шаблона, тогда я полагаю, что могу использовать переменные сеанса, и я включил библиотеку сеансов beaker, но я не могу понять, как получить доступ к переменным сеанса в шаблоне django. Есть идеи, как мне это сделать?

Я использую встроенный по умолчанию django с движком приложений Google и могу получать доступ к переменным сеанса с помощью обработчика запросов, но я не понимаю, как это сделать в шаблонах:

class Sessiontest(webapp.RequestHandler):
    def get(self):
        # Get the session object from the environ
        self.session = self.request.environ['beaker.session']

        # Check to see if a value is in the session
        if 'counter' in self.session:
            counter = self.session['counter'] + 1
            self.session['counter'] = counter

        else:
            self.session['counter'] = 1
            counter = 1
        self.session.save()
        self.response.out.write('counter: %d' % counter)

Спасибо

Обновление / редактирование: Моя проблема почти такая же, как эта Доступ к переменной сеанса в шаблоне Django с помощью Google App Engine (Webapp) - Python , но с библиотечным стаканом вместо gaeutilities

Обновление: вот часть кода. мы видим, что использование HTTP GET для передачи значений будет не очень хорошим, поскольку есть антиспам-тест, который должен скрывать значения:

def post(self, view):
    message = ''
    challenge = self.request.get('recaptcha_challenge_field').encode('utf-8')
    response  = self.request.get('recaptcha_response_field').encode('utf-8')
    remoteip  = os.environ['REMOTE_ADDR']
    cResponse = captcha.submit(
                 challenge,
                 response,
                 CAPTCHA_PRV_KEY,
                 remoteip)
    if cResponse.is_valid:
        isHuman=True
    else:#failed anti-spam test and can try again
        isHuman=False
        #Reprint the form
        import util
        template_values = {'isHuman':isHuman,'user' : users.get_current_user(),}
        template_values.update(dict(current_user=self.current_user, facebook_app_id=FACEBOOK_APP_ID))
        template_values.update(dict(capture=captcha.displayhtml(public_key = CAPTCHA_PUB_KEY, use_ssl = False, error = None)))
        path = os.path.join(os.path.dirname(__file__), 'market', 'market_insert.html')
        self.redirect("/ai") # Here the values aren't passed on and I must make a redirect

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Если вы делаете перенаправление, вам, возможно, придется перенаправить с переменными, которые вы хотите сохранить в строке GET. Итак, вы перенаправляете с

/myview/

до

/myview2/?variable1=value

Тем не менее, я думаю, что вы действительно должны посмотреть, почему вы делаете перенаправления. Я склонен делать их после POST для формы, и если пользователь должен войти в систему, я перенаправляю на экран входа с

/authentication/login/?next=/view/they/wanted/to/see

В противном случае вы могли бы хранить вещи в куки, но это не лучший способ для продолжения.

1 голос
/ 18 марта 2013

Как насчет того, чтобы позволить вашему классу наследовать от нескольких классов, как класса requesthandler, так и blobstoreuploadhandler, таким образом, вы можете как визуализировать ваш шаблон со значениями с помощью функций в обработчике запросов, так и использовать функции в blobstoreuploadhandler?

Определение класса с несколькими базовыми классами выглядит следующим образом:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    ...
    <statement-N>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...