【发布时间】:2016-04-02 17:49:51
【问题描述】:
在每个页面点击期间必须确定许多变量,但在我的项目中的不同位置使用,不仅是模板,而且在视图中。到目前为止,我一直在使用上下文处理器(称为“全局”)来实现此结果。请注意,在上下文处理器中,我正在执行实际计算和数据库调用,因此我不仅需要设置变量。
自从从 Django 1.7 升级到 1.8 后,上下文处理器返回的变量仍然显示在模板中,这很好,但它们不再显示在视图中,至少我找不到它们。
在我的上下文处理器中,我有以下代码:
def globals(request):
# NOTE: We DON'T simply need a variable from settings - in reality this is computed
if_this_is_true_then_we_alter_text = True
ctx = {
'var_from_contextprocessor': if_this_is_true_then_we_alter_text,
}
return ctx
那么,在我看来,我有:
from django.template import RequestContext
from django.shortcuts import render
def show_globals(request):
ctx = RequestContext(request)
ctx['var_from_view'] = 'YES, we found it!' if ctx.has_key('var_from_contextprocessor') else 'NO, it ain\'t there!'
return render(request, 'show_globals.html', context_instance=ctx)
我的模板show_globals.html如下:
var_from_view: {{ var_from_view }}
var_from_contextprocessor: {{ var_from_contextprocessor }}
运行 Django 1.7 时,视图中模板的输出将是“YES,我们找到它!”。但是,一旦我升级到 1.8,上下文处理器返回的变量似乎对视图可用,因此文本更改为“不,它不存在!”。然而,在这两种情况下,var_from_contextprocessor 都会适当地显示在模板本身中。
还有没有办法在单个视图中从上下文处理器中检索变量?如果没有,关于如何在不使用上下文处理器的情况下获得相同结果的任何建议?
请注意,我试图解决的基本问题是在每次页面点击期间动态计算变量,然后视图和模板都可以使用这些变量。我真的不在乎这是否通过使用上下文处理器来完成。
提前致谢!
【问题讨论】:
标签: django django-templates django-1.8