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

2024-05-29 06:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有:

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\u reference静态方法引用view操作内的referer,但我一直得到:“function”对象没有属性“referer”。有什么想法吗?在

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


Tags: selfviewreturnmakodefarticlerenderclass
2条回答

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

很可能您不希望在这里使用静态方法。(在Python中几乎永远不需要静态方法。我不记得我曾经用过一个。)也许你只需要一个class属性:

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

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

您没有从detect_referral返回referrer,并且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', '')

相关问题 更多 >

    热门问题