Ссылка на переменную из статического метода внутри другого действия в пилонах - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть:

class ArticleController(SubbaseController):

def view(self):
    c.referral = self.detect_referral.referrer
    return render('/article.mako')

@staticmethod
def detect_referral():
    referrer = request.META.get('HTTP_REFERRER', '')

Я пытаюсь ссылаться на реферер внутри действия представления из статического метода dete_referral, но я продолжаю получать: у объекта 'function' нет атрибута 'referrer'. Есть идеи?

Кроме того, это правильный способ получить реферера?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Вы не возвращаете referrer из detect_referral, а detect_referral не является свойством, поэтому вы не можете использовать этот синтаксис.

class ArticleController(BaseController):
    def view(self):
        c.referral = self.detect_referral()
        return render('/article.mako')

    @staticmethod
    def detect_referral():
        return request.META.get('HTTP_REFERRER', '')
0 голосов
/ 29 ноября 2011

Это локальная переменная внутри detect_referral(), и поэтому ее время жизни ограничено временем выполнения метода.До вызова метода и после его возврата локальные переменные просто не существуют.(Кажется, вы даже не вызываете метод, поэтому локальная переменная не существует во время выполнения вашей программы.)

Скорее всего, вам здесь не нужен статический метод.(Вам почти никогда не нужен статический метод в Python. Я не могу вспомнить, чтобы когда-либо использовал его.) Может быть, все, что вам нужно, это атрибут класса:

class ArticleController(SubbaseController):
    referrer = request.META.get('HTTP_REFERRER', '')
    def view(self):
        c.referral = self.referrer
        return render('/article.mako')

Обратите внимание, что тело класса выполняется один раз при определении классавремя.

...