python-如何在Flask中设置全局变量?

jin*_*lei 16 python flask

我正在处理一个Flask项目,我希望在滚动时让索引加载更多内容.我想设置一个全局变量来保存页面加载的次数.我的项目结构如下:

???run.py
???app
   ???templates
   ???_init_.py
   ???views.py
   ???models.py
Run Code Online (Sandbox Code Playgroud)

首先,我将全局变量声明为_init_.py:

global index_add_counter
Run Code Online (Sandbox Code Playgroud)

和Pycharm警告说 Global variable 'index_add_counter' is undefined at the module level

views.py:

from app import app,db,index_add_counter
Run Code Online (Sandbox Code Playgroud)

而且有 ImportError: cannot import name index_add_counter

我还引用了global-variable-and-python-flask 但是我没有main()函数.在Flask中设置全局变量的正确方法是什么?

Sal*_*lva 22

附:

global index_add_counter
Run Code Online (Sandbox Code Playgroud)

你没有定义,只是声明这就像说index_add_counter其他地方有一个全局变量,而不是 创建一个全局调用index_add_counter.由于您的名称不存在,Python告诉您它无法导入该名称.因此,您只需删除global关键字并初始化您的变量:

index_add_counter = 0
Run Code Online (Sandbox Code Playgroud)

现在你可以用以下方法导入它:

from app import index_add_counter
Run Code Online (Sandbox Code Playgroud)

那个工程:

global index_add_counter
Run Code Online (Sandbox Code Playgroud)

在模块的定义中使用,以强制解释器在模块的范围内查找该名称,而不是在定义中:

index_add_counter = 0
def test():
  global index_add_counter # means: in this scope, use the global name
  print(index_add_counter)
Run Code Online (Sandbox Code Playgroud)

  • 请注意:虽然这对于python请求有意义,但对于可以在线程和工作程序中运行的Flask应用而言可能没有意义。定义这样的全局变量在投影中使用时可能会导致意外的结果,最好使用永久数据存储系统(如内存缓存或其他数据库)。根据您的用例,这可能有意义,也可能没有意义。 (6认同)