我在views.py文件中引用此方法时遇到此错误:
def AddNewUser(request):
a=AMI()
if(request.method == "POST"):
print(request.POST)
# print(request['newUser'])
# print(request['password'])
return render_to_response("ac/AddNewUser.html", {})
但我的其他功能运作得很好。这只是我的HTML文件中的这个按钮不起作用。
<form name="AddNewUser" action="/ac/AddNewUser" method="post"> {% csrf_token %} <input type="submit" name="addNewUser" id="addNewUser" value="Create User"></form>
正如你所看到的,我已经获得了{%csrf_token%},但它仍然无效。我也知道有些人在他们的settings.py中没有MIDDLEWARE_CLASSES但是我已经正确插入了这个问题。什么可能导致这个问题?错误中唯一的另一行说:“视图函数使用RequestContext作为模板,而不是Context。”但我不知道这意味着什么。
答案 0 :(得分:11)
您必须使用RequestContext对象来获取上下文,然后将结果传递给 render_to_response()函数。 RequestContext 添加了必需的CSRF令牌。
from django.template import RequestContext
from django.shortcuts import render_to_response
csrfContext = RequestContext(request)
return render_to_response(some_template, csrfContext)
作为旁注,您还可以使用 RequestContext 添加用于模板的上下文/词典。例如,我经常使用:
initialData = {'form': theForm, 'user_status': 'online'}
csrfContext = RequestContext(request, initialData)
return render_to_response(show_template, csrfContext)
作为 RequestContext 所做的(简要)解释:大多数中间件创建了一个叫做上下文处理器的东西,它只是一个提供上下文(字典)的函数。变量。 RequestContext 查找所有可用的上下文处理器,获取它们的上下文,并将它们全部附加到单个(巨型)上下文中。
答案 1 :(得分:2)
注意:RequestContext必须在提供表单的视图以及接收帖子的视图中使用。如果您按照上述说明操作仍然无效,则可能是问题!这是给我的。