2016-02-10 22 views
6

Pracuję nad projektem Flask i chcę, aby moje indeksowanie ładowało większą zawartość podczas przewijania. Chcę ustawić zmienną globalną, aby zapisać ile razy strona zostanie załadowana. Mój projekt jest skonstruowany jako:python - Jak ustawić zmienne globalne w kolbie?

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

Początkowo oświadczam zmienną globalną w _init_.py:

global index_add_counter 

i pycharm ostrzegł Global variable 'index_add_counter' is undefined at the module level

W views.py:

from app import app,db,index_add_counter 

i jest ImportError: cannot import name index_add_counter

Mam również odniesienie global-variable-and-python-flask Ale nie mam funkcji main(). Jaki jest właściwy sposób ustawiania zmiennej globalnej w kolbie?

Odpowiedz

8

Z:

global index_add_counter 

nie definiują, tylko deklarując tak jakby powiedzieć jest zmienna globalna index_add_counter gdzie indziej, i niestworzyć globalną nazywane index_add_counter. Ponieważ nazwa nie istnieje, Python informuje Cię, że nie może zaimportować tej nazwy. Więc trzeba po prostu usunąć słowa kluczowego global i zainicjować zmienną:

index_add_counter = 0 

Teraz można importować go z:

from app import index_add_counter 

Konstrukcja:

global index_add_counter 

jest używany wewnątrz modułów definicje, które zmuszają tłumacza do szukania tej nazwy w zakresie modułów, a nie w definicji:

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

lepszym miejscem dla globalnych danych w aplikacjach kolby flask.g obiekt, który jest opisany tutaj: http://flask.pocoo.org/docs/0.10/api/#flask.g

+10

Mówiąc, że g jest globalnym jest mylące .. to działa tylko na przykład widok .. jeśli przejść z jednej strony do innego, G jest całkowicie usunięte. –

+1

g jest odwołaniem do żądania, które jest tworzone przed uruchomieniem żądania i usuwane po usunięciu żądania. –