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

时间:2018-01-22 02:14:49

标签: python django processor

我在导航栏中有几个要在每个模板上显示的变量,因此我制作了一个自定义上下文处理器来处理这些变量的获取。一切正常,除了在数据库中更改数据时,不会刷新上下文变量的值(例如,只有在我退出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 %}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

那是因为你只是在流程开始时而不是按照请求阅读它们。

你可以:

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

b)确保您存储的模块变量在更改时更新(例如,使用post_save信号)。但是,如果您使用一个线程运行多个进程,这将使您对意外行为开放......