我在导航栏中有几个要在每个模板上显示的变量,因此我制作了一个自定义上下文处理器来处理这些变量的获取。一切正常,除了在数据库中更改数据时,不会刷新上下文变量的值(例如,只有在我退出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 %}
我有什么遗漏或这是正常行为吗?我在这里使用了错误的方法来使用上下文处理器吗?
答案 0 :(得分:1)
当Django处理模板时,它会将html文件视为字符串,并在返回结果之前插入变量的值。这意味着值保持与呈现模板时一样。您想要实现的目标有很多种方法,最简单的方法是采用AJAX方法并不断轮询新值。
答案 1 :(得分:1)
那是因为你只是在流程开始时而不是按照请求阅读它们。
你可以:
a)在每个请求中检索它们(例如,在视图中,上下文处理器等等。)
或
b)确保您存储的模块变量在更改时更新(例如,使用post_save信号)。但是,如果您使用一个线程运行多个进程,这将使您对意外行为开放......