【问题标题】:Django keep variable in memory, even if i refresh the pageDjango将变量保留在内存中,即使我刷新页面
【发布时间】:2015-04-15 14:18:10
【问题描述】:

我正在使用 Django Framework 1.7 及其网络服务器。

我有一个自定义类,我在其中声明了一个静态变量,一个列表,我在其中附加了一些值:

class my_class:

    list = [] 

    def __init__( self, *args, **kwargs ): 
        [...]

    def append_value(self,value):
        self.list.append( value )

我使用静态变量是因为我调用这个函数的时间不同。 在单页加载期间,我的课程运行良好,但我注意到 my_class.list 永不过期。

要重置列表,我必须重新启动网络服务器。

我来自 PHP 和 Perl,每次刷新页面时,如果不以某种方式保存变量,所有变量都会被清除。

当然,我使用会话,但我不会将该列表保存到会话中,至少不是自愿的。

注意:我不知道,在脚本执行期间,我是第一次还是最后一次调用 my_class()。

如何在每次重新加载/更改页面时重置列表?

编辑:

好的,我试着更好地解释我的情况

  • 我有一个“javascript 存储库”类。它的作用是响应一串javascript函数。
    Javascript 函数组织在独立模块(函数列表)中,因此我可以将所需的函数附加到我的页面。
    不同的模块可以共享相同的功能。
  • 在我看来,我指定了一个函数的url(它在同一个视图中)get_js_code,它的规则是返回javascript代码(带有:return HttpResponse(code,content_type="application/x-javascript")
  • get_js_code 启动“javascript 存储库类”,询问一个或多个模块(函数列表),我的类只返回一次函数,即使一个函数属于多个模块。
  • 在我的模板中,我将 get_js_code url 指定为 javascript 资源,并从 Django 页面下载 javascript 代码

效果很好但是

  • 每个应用程序都需要一个模块,因此我在中间件中指定了一个 url,该 url 将引导到启动该类的另一个应用程序/函数,以便将公共 javascript 模块作为 javascript 资源附加。

问题出在这里

  • 我的“javascript 存储库类”有一个列表,其中包含返回的 javascript 函数列表,以便只返回一次函数。它运行良好,但只有一次:事实上,如果我重新加载页面,列表不会过期并且不会返回任何 javascript 函数。

很难解释,我希望现在清楚。

PS:我错了,我没有在中间件中启动类。

PPS:我知道将 javascript 代码放在 Python 代码中是不寻常的,但我正在测试这个解决方案。

【问题讨论】:

  • 这个类在哪里实例化?
  • 例如在 MiddlewareView

标签: python django variables static


【解决方案1】:

将其定义为实例变量而不是类变量。

class my_class:

    def __init__( self, *args, **kwargs ): 
        self.list = []

请注意,如果您在中间件中进行设置,您仍然需要注意这个问题;永远不要在中间件类的__init__ 中设置任何状态,因为它只会在进程启动时执行一次。

【讨论】:

  • 谢谢丹尼尔但是:我不能将它设置为一个 istance 变量,因为我在执行期间调用我的函数的时间不同,并且:该类不是中间件类,但它在中间件中被实例化(也是)。
  • 好吧,看来你做事的方式肯定不对。这个类的用例是什么?为什么需要从所有这些不同的地方访问它,为什么不能明确地传递数据?
  • 多次上课就这么奇怪吗?我想找到解决方案,而不是解决方法
  • 不,初始化一个类并期望它在某些情况下保留值但在其他情况下不保留,这很不寻常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2011-08-23
  • 2023-03-28
  • 2014-07-24
  • 2013-04-18
相关资源
最近更新 更多