2

我希望在实际渲染之前使用上下文处理器或中间件来修改传递给 render_to_response 的字典值。我有一个正在尝试实现的消息传递模式,它将根据我想在呈现模板之前搜索上下文的用户类型的存在来填充消息列表。

例子:

def myview(...):
    ...
    return render_to_response('template.html',
        {'variable': variable},
    )

我希望能够在上下文中添加有关“变量”存在的附加信息。

在我的视图定义它之后但在它到达模板之前如何访问“变量”,以便我可以进一步修改上下文?

4

3 回答 3

5

使用模板响应

from django.template.response import TemplateResponse

def myview(...):
    ...
    return TemplateResponse(request, 'template.html', 
        {'variable': variable},
    )

def my_view_wrapper(...):
    response = my_view(...)
    variable = response.context_data['variable']
    if variable == 'foo':
        response.context_data['variable_is_foo'] = True
    return response
于 2012-02-12T01:28:48.583 回答
2

这很简单。如果您在示例中提供了更多代码,那么答案可能会让您感到困惑。

# first build your context, including all of the context_processors in your settings.py
context = RequestContext(request, <some dict values>)
# do something with your Context here
return render_to_response('template.html', context)

更新评论:

a 的结果render_to_response()是一个 HTTPResponse 对象,其中包含针对 Context 呈现的模板。该对象(据我所知)没有与之关联的上下文。我想您可以将结果保存render_to_response()在一个变量中,然后访问您传递给它的 Context,但我不确定您要解决什么问题。

您是否在渲染期间修改了上下文?如果是这样,您可能会发现信息不再存在,因为 Context 有一个在模板处理期间被推送/弹出的范围堆栈。

于 2012-02-12T00:37:55.400 回答
0

您可以为上下文创建字典:

def myview(...):
    c = dict()
    c["variable"] = value
    ...
     do some stuff
    ...
    return render_to_response('template.html',c)

也许RequestContext是您正在寻找的东西。

于 2012-02-12T00:34:10.677 回答