在Pylons中的另一个动作中引用静态方法的变量

时间:2011-11-28 21:55:09

标签: python pylons pyramid

我有:

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', '')

我正在尝试从detect_referral静态方法引用view动作中的referrer,但我不断得到:'function'对象没有属性'referrer'。有什么想法吗?

另外,这是获取推荐人的正确方法吗?

2 个答案:

答案 0 :(得分:0)

它是detect_referral()内的局部变量,因此其生命周期仅限于方法的执行时间。在调用方法之前和方法返回之后,本地变量根本就不存在。 (您甚至似乎都没有调用该方法,因此本地变量在您的程序执行时都不存在。)

很可能你不想在这里使用静态方法。 (你几乎不想在Python中使用静态方法。我不记得曾经使用过。)也许你需要的只是一个类属性:

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

请注意,类主体在类定义时执行一次。

答案 1 :(得分:0)

您没有从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', '')
相关问题