2016-02-10 21 views
6

Tôi đang làm việc với dự án Flask và tôi muốn chỉ mục của tôi tải nhiều nội dung hơn khi cuộn. Tôi muốn đặt biến toàn cục để lưu số lần trang được tải. Dự án của tôi được cấu trúc như:python-Làm thế nào để thiết lập các biến toàn cầu trong Flask?

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

Lúc đầu, tôi khai báo biến toàn cầu trong _init_.py:

global index_add_counter 

và Pycharm cảnh báo Global variable 'index_add_counter' is undefined at the module level

Trong views.py:

from app import app,db,index_add_counter 

và có ImportError: cannot import name index_add_counter

Tôi cũng đã tham chiếu global-variable-and-python-flask Nhưng tôi không có hàm main(). Cách đúng để đặt biến toàn cục trong Flask là gì?

Trả lời

8

Với:

global index_add_counter 

Bạn chưa xác định, chỉ cần khai báo do đó, nó giống như nói có một biến index_add_counter toàn cầu ở nơi khác, và khôngtạo ra một thế giới gọi là index_add_counter. Khi bạn đặt tên không tồn tại, Python sẽ cho bạn biết rằng nó không thể nhập tên đó. Vì vậy, bạn cần phải chỉ đơn giản là loại bỏ các từ khóa global và khởi tạo biến của bạn:

index_add_counter = 0 

Bây giờ bạn có thể nhập nó với:

from app import index_add_counter 

Việc xây dựng:

global index_add_counter 

được sử dụng bên trong module các định nghĩa để buộc trình thông dịch tìm kiếm tên đó trong phạm vi của mô-đun, không phải trong định nghĩa một:

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

tốt hơn cho dữ liệu toàn cầu trong các ứng dụng bình là flask.g đối tượng, được mô tả ở đây: http://flask.pocoo.org/docs/0.10/api/#flask.g

+10

Nói rằng g là toàn cầu đang gây hiểu lầm .. nó chỉ hoạt động trên các ví dụ xem .. nếu bạn chuyển từ một trang khác, G là hoàn toàn bị xóa. –

+1

g là tham chiếu đến một yêu cầu được tạo trước khi yêu cầu bắt đầu và xóa sau khi yêu cầu bị xóa. –

Các vấn đề liên quan