Python Django CSRF表单提交错误

Python Django CSRF表单提交错误,python,django,Python,Django,我正在写一个Django应用程序。这是我的密码: 编辑.module.html(模板;删除额外的html标记): view.py url(r'^myapp/update/$', 'myproj.myapp.views.update_module'), from django.http import HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from django.core.co

我正在写一个Django应用程序。这是我的密码:

编辑.module.html(模板;删除额外的html标记):

view.py

url(r'^myapp/update/$', 'myproj.myapp.views.update_module'),
from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.core.context_processors import csrf
from django.template import RequestContext

#Select the module you want to edit
def edit_modules(request):
    lpconf = {"module_to_edit" : "top"}
    return render_to_response('admin/edit.module.html', lpconf, context_instance=RequestContext(request))

def update_module(request):
    return render_to_response('admin/updated.html', context_instance=RequestContext(request))
当我提交表单时,我收到CSRF错误:“CSRF验证失败。请求中止。”

我遵循了Django文档()并试图解决这个问题,但我做不到。我做错了什么

谢谢

更新:Updated view.py函数编辑_模块并更新_模块。edit_模块是呈现表单的模块,update_模块是处理表单的模块。现在,我没有得到CSRF错误。我现在收到错误:空模块名


更新:我能够修复它。我使用一个视图渲染表单,另一个视图处理表单。我必须向呈现表单的第一个视图添加上下文。

update\u模块
视图中需要一个
RequestContext
,而不是一个普通的
HttpResponse
。如果您使用handy,它将自动添加。在Django教程中有一个很好的快速介绍

update\u模块
视图中需要一个
RequestContext
,而不是一个普通的
HttpResponse
。如果您使用handy,它将自动添加。在Django教程中有一个很好的快速介绍

您可以在settings.py中启用请求上下文过程

TEMPLATE_CONTEXT_PROCESSORS = (...
    "django.core.context_processors.request")
因此,您不必执行以下操作:

return render_to_response('my_template.html',
                      my_data_dictionary,
                      context_instance=RequestContext(request)
相反,只需: 返回render_to_response('my_template.html', 我的数据(字典)


另外,请确保在设置中的中间件类中启用了“django.middleware.csrf.CsrfViewMiddleware”。py可以在设置中启用请求上下文过程。py

TEMPLATE_CONTEXT_PROCESSORS = (...
    "django.core.context_processors.request")
因此,您不必执行以下操作:

return render_to_response('my_template.html',
                      my_data_dictionary,
                      context_instance=RequestContext(request)
相反,只需: 返回render_to_response('my_template.html', 我的数据(字典)


另外,请确保在您的设置中的中间件类中启用了“django.middleware.csrf.CsrfViewMiddleware”。py

我是否需要传递一个实际的模板html文件才能工作?我不能在不使用实际HTML文件的情况下传递一些文本消息吗?您可能应该定义一个适当的HTML模板,在您的templates目录中创建一个模板不需要花费时间!是的,我刚刚做了,在视图中我将代码更新为“returnrender(request,'updated.html')”。同样的CSRF错误。我还导入了“from django.shortcuts import render”@Leon的django教程可能会很有用。您应该在update_模块视图中检查表单是否已发布,如果未发布,则呈现表单。@Leon看起来您必须使用单独的视图呈现表单本身?我通常使用相同的视图处理和呈现POST表单,并在成功时使用
HttpResponseRedirect
。也许这就是问题所在?我是否需要传递一个实际的模板html文件来实现这一点?我不能在不使用实际HTML文件的情况下传递一些文本消息吗?您可能应该定义一个适当的HTML模板,在您的templates目录中创建一个模板不需要花费时间!是的,我刚刚做了,在视图中我将代码更新为“returnrender(request,'updated.html')”。同样的CSRF错误。我还导入了“from django.shortcuts import render”@Leon的django教程可能会很有用。您应该在update_模块视图中检查表单是否已发布,如果未发布,则呈现表单。@Leon看起来您必须使用单独的视图呈现表单本身?我通常使用相同的视图处理和呈现POST表单,并在成功时使用
HttpResponseRedirect
。也许这就是问题所在?
TEMPLATE_CONTEXT_PROCESSORS = (...
    "django.core.context_processors.request")