Referenzierung der Variablen aus der statischen Methode innerhalb einer anderen Aktion in Pylonen

StackOverflow https://stackoverflow.com/questions/8302919

  •  25-10-2019
  •  | 
  •  

Frage

Ich habe:

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

Ich versuche, den Empfehler in der Ansichtsaktion aus der statischen Methode von DECTECT_REFERRRAL zu verweisen, aber ich erhalte immer wieder: 'Funktion' Objekt hat stattdessen kein Attribut 'Referrer'. Irgendwelche Ideen?

Ist das auch der richtige Weg, um den Referrer zu erhalten?

War es hilfreich?

Lösung

Sie geben die nicht zurück referrer aus detect_referral, und detect_referral ist keine Eigenschaft, also können Sie diese Syntax nicht verwenden.

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

Andere Tipps

Es ist eine lokale Variable im Inneren detect_referral(), und als solche ist seine Lebensdauer auf die Ausführungszeit der Methode beschränkt. Bevor die Methode aufgerufen wird und nach der Methode die lokale Variablen zurückgibt, gibt es einfach nicht. (Sie scheinen die Methode nicht einmal zu nennen, sodass die lokale Variable zu keinem Zeitpunkt der Ausführung Ihres Programms existiert.)

Höchstwahrscheinlich wollen Sie hier keine statische Methode. (Sie wollen fast nie eine statische Methode in Python. Ich kann mich nicht erinnern, dass ich jemals eine verwendet habe.) Vielleicht ist alles, was Sie brauchen, ein Klassenattribut:

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

Beachten Sie, dass der Klassenkörper einmal zur Zeit der Klassendefinition ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top