Python django-未更新上下文处理器变量

Python django-未更新上下文处理器变量,python,django,processor,Python,Django,Processor,我在导航栏中有几个变量,它们将显示在每个模板上,因此我制作了一个自定义上下文处理器来处理这些变量的获取。一切都正常,只是当数据库中的数据发生更改时,上下文变量的值不会刷新(例如,只有在我退出runserver并重新运行后,它才会更新) 以下是我的基本伪代码: context_processor.py: foo = db.get('foo') bar = db.get('bar') def default(request): return {'foo': foo, 'bar': bar}

我在导航栏中有几个变量,它们将显示在每个模板上,因此我制作了一个自定义上下文处理器来处理这些变量的获取。一切都正常,只是当数据库中的数据发生更改时,上下文变量的值不会刷新(例如,只有在我退出
runserver
并重新运行后,它才会更新)

以下是我的基本伪代码:

context_processor.py:

foo = db.get('foo')
bar = db.get('bar')

def default(request):
    return {'foo': foo, 'bar': bar}
base.html:

{% block header %}
foo value is: {{ foo }}, bar value is {{ bar}}
{% endblock %}

{% block content %}
{% endblock %}
some_other_template.html:

{% extends "base.html" %}

{% block content %}
    ...blabla
{% endblock %}

我有什么遗漏吗?或者这是正常的行为吗?我是否在这里使用了错误的上下文处理器?

当Django处理模板时,它将html文件视为字符串,并在返回结果之前插入其中的变量值。这意味着这些值保持在呈现模板时的状态。有许多方法可以实现您想要实现的目标,最简单的方法是采用AJAX方法并不断轮询新值。

这是因为您只在流程启动时读取它们,而不是按请求读取

你可以:

a) 在每个请求中检索它们(例如,在视图中,上下文处理器中,等等)


b) 确保存储它们的模块变量在任何时候更改时都会更新(例如,使用post_保存信号)。但是,如果您使用一个线程运行多个进程,这将使您面临意外行为。

感谢您的澄清和建议!非常感谢你!我已经意识到现在发生了什么。(我投了你的赞成票,但不确定是谁投了你的反对票……/)