【问题标题】:Django context processor : views does not reloadDjango 上下文处理器:视图不会重新加载
【发布时间】:2013-02-22 19:34:20
【问题描述】:

我用 Django 构建了一个包含一定数量视图的应用程序。我必须从一个项目切换到另一个使用相同视图的项目。

为此,我使用了一个上下文处理器,它返回字典中变化的变量。然后在我所有的观点中,我返回一个context_instance=RequestContext(request)

我的问题是,直到我再次单击“更改项目”按钮后,我的视图才会重新加载。

我不知道我是否足够清楚,但如果有人可以提示我这里出了什么问题,那就太好了。 我什至不知道哪段代码有助于理解这个问题,所以如果你认为你可以帮助,请询问!

编辑

我的 context_processor 示例

from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.template import RequestContext

def display_select_proj(request):
if request.method == "POST" and (request.POST.get("action", "") == "OK"):
     form = SelectForm(request.POST, proj_id=request.session['proj'])
     if form.is_valid():
         p = form.save()
         request.session['proj'] = proj

         return {'my_variables': my_variables}

【问题讨论】:

  • 请发布示例代码

标签: django django-views


【解决方案1】:

上下文处理器不适合这种逻辑,尤其是会话修改。您应该将其移至middleware 或查看函数。

为什么您的方法不起作用:上下文处理器只是修改正在呈现的模板的上下文,并在您的视图函数之后应用。 See "When context processors are applied"

【讨论】:

  • 哦,对了!现在它很有意义!我从来没有真正意识到..你有中间件使用的例子吗,我还不明白它是如何工作的。
  • 您可以创建process-request middleware,它将根据需要修改会话(并且不要忘记在SessionMiddleware 之后包含您的自定义中间件。但我认为这个逻辑的适当位置是视图函数,因为你处理形式。
  • 好的,我会试试的。我使用上下文处理器的原因是因为我需要在所有页面中都可用的表单。它仍然可以与中间件或视图一起使用吗?
  • 如果您需要在每个页面上都有一个表单 - 使用上下文处理器。但我认为处理表单(保存、检查验证)应该是一个视图。
猜你喜欢
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2016-07-01
  • 1970-01-01
  • 2017-10-24
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多