【问题标题】:Help with passing variables w/ csrfContext使用 csrfContext 帮助传递变量
【发布时间】:2011-07-29 01:42:42
【问题描述】:

我有一个登录页面,在我看来,我将 csrf_token 标记的 csrfContext 变量传递给它。但是,当我尝试将不仅仅是该变量传递到上下文中时,就会出现问题。例如,如果我使用 locals()

return render_to_response('base_index.html', locals())

我收到一个 csrf 错误。出于某种原因,它只有在我明确传递 csrfContext 时才有效,而且只有 csrfContext。但是,我还需要传递其他变量。如何将 csrfContext 和这些变量一起传递?对不起,如果这是一个令人费解的问题。我的查看代码是:

def index(request):
    current = Module.objects.all()
    error = ""
    try:
        error = request.GET["alert"]
        if error == "failure":
            error = "Woops! Something went wrong. Please try again."
        elif error == "invalid":
            error = "Invalid username/password."
        else:
            error = "Unknown Error. Please try again."
    except:
        pass
    csrfContext = RequestContext(request, error, current)
    return render_to_response('base_index.html', csrfContext)

如您所见,我一直在尝试将变量添加到 RequestContext,但我不知道如何在模板中访问它们。

【问题讨论】:

  • 在发布后几秒钟就明白了。我将我的退货声明修改为:return render_to_response('base_index.html', locals(), csrfContext) 一切正常!

标签: python django csrf


【解决方案1】:

我不建议以这种方式使用 locals()。在更复杂的视图中,您最终可能会向所需的模板渲染传递更多内容。

更好的方法是创建 RequestContext,然后传入您要添加的值,或者在后面添加它们:https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.Context

【讨论】:

    【解决方案2】:

    我使用了return render_to_response('base_index.html', locals(), csrfContext),效果很好

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多