2016-02-10 9 views
6

Ich arbeite an einem Flask Projekt und ich möchte meinen Index laden mehr Inhalte beim Scrollen. Ich möchte eine globale Variable festlegen, um zu speichern, wie oft die Seite geladen wurde. Mein Projekt ist wie:python-Wie globale Variablen in Flask gesetzt werden?

global index_add_counter 

und PyCharm gewarnt Global variable 'index_add_counter' is undefined at the module level

In views.py:

from app import app,db,index_add_counter 

├──run.py 
└──app 
    ├──templates 
    ├──_init_.py 
    ├──views.py 
    └──models.py 

Zuerst habe ich die globale Variable in _init_.py erklären und da ist ImportError: cannot import name index_add_counter

Ich habe auch verwiesen global-variable-and-python-flask Aber ich habe keine main() -Funktion. Was ist der richtige Weg, um globale Variable in Flask zu setzen?

Antwort

8

mit:

global index_add_counter 

Sie definieren nicht nur erklären, so ist es wie wenn man sagt es ein globaler ist index_add_counter Variable anderswo, und nichtein globalen index_add_counter genannt erstellen. Da Ihr Name nicht existiert, sagt Ihnen Python, dass er diesen Namen nicht importieren kann. Sie müssen also einfach das global Schlüsselwort entfernen und Ihre Variable initialisieren:

index_add_counter = 0 

Jetzt können Sie es importieren mit:

from app import index_add_counter 

Der Aufbau:

global index_add_counter 

innerhalb Module verwendet Definitionen, die den Interpreter zwingen, im Bereich der Module nach diesem Namen zu suchen, nicht in der Definition eins:

index_add_counter = 0 
def test(): 
    global index_add_counter # means: in this scope, use the global name 
    print(index_add_counter) 
3

besserer Platz für globale Daten in Kolben-Anwendungen ist flask.g Objekt, das hier beschrieben wird: http://flask.pocoo.org/docs/0.10/api/#flask.g

+10

Zu sagen, dass g global ist irreführend .. es nur auf der View-Instanz funktioniert .. wenn Sie von einer Seite verschieben zum anderen ist das G komplett gelöscht. –

+1

Das g steht für eine Anfrage, die vor dem Start der Anfrage erstellt und gelöscht wird, nachdem die Anfrage gelöscht wurde. –