表单动作在 django 中不起作用
Posted
技术标签:
【中文标题】表单动作在 django 中不起作用【英文标题】:form action not working in django 【发布时间】:2013-04-07 13:27:14 【问题描述】:我有 django 1.4,我正在学习使用旧版本 django 的教程。它是一个简单的教程,它创建一个以 Page 作为模型的 wiki 应用程序。
问题是表单中POST方法对应的视图函数没有被调用。
这是urls.py中的内容:
url(r'^wikicamp/(?P<page_name>[^/]+)/edit/$', 'wiki.views.edit_page'),
url(r'^wikicamp/(?P<page_name>[^/]+)/save/$', 'wiki.views.save_page'),
url(r'^wikicamp/(?P<page_name>[^/]+)/$', 'wiki.views.view_page'),
这是模板edit.html的内容:
<from method = "get" action="/wikicamp/page_name/save/">
% csrf_token %
<textarea name = "content" rows="20" cols="60">
content
</textarea>
<br/>
<input type="submit" value="Save Page"/>
</form>
<a href="/wikicamp/page_name/save/">this is link to save</a>
这是views.py中的内容:
def edit_page(request, page_name):
try:
page = Page.objects.get(pk=page_name)
content = page.content
except Page.DoesNotExist:
content = ""
return render_to_response("edit.html", "page_name":page_name, "content":content, context_instance=RequestContext(request))
def save_page(request, page_name):
return HttpResponse("You're looking at the page %s." % page_name)
我最初遇到了与 csrf 相关的错误,然后我尝试了 https://docs.djangoproject.com/en/dev/ref/contrib/casrf/ 中提供的所有修复程序,并关注了许多与 POST 和 django 相关的 *** 问题。现在,当我单击“保存页面”按钮时,什么也没有发生,什么都没有!甚至没有从表单发送任何请求(使用 firebug 跟踪 HTTP 请求和响应)
【问题讨论】:
【参考方案1】:您的 HTML 中有错字:from
而不是 form
。
您可能意识到这一点,但该代码不会真正保存任何内容。我不确定您关注的是哪个博客,但您最好按照文档中的官方 Django 教程,然后阅读表单文档。
【讨论】:
天哪,杀了我!!!是的,那是错误。不,'save_page' 是一个复杂的功能。为了调试,我把它改成了可以工作的东西。谢谢!【参考方案2】:您可能需要在表单中将method
更改为"POST"
。
<from method = "get" action="/wikicamp/page_name/save/">
到
<form method = "post" action="/wikicamp/page_name/save/">
【讨论】:
你抄袭了他的拼写错误。 实际上,当它不起作用时,我正在玩弄“get”和“post”。是的,“表格”是罪魁祸首:(。谢谢!【参考方案3】:有一些拼写错误,例如from
而不是form
。
表格也有问题。
变化:
<a href="/wikicamp/page_name/save/">this is link to save</a>
到
<input type="submit" value="Save Page" />
第三,将method= "get"
更改为method="POST"
。
整个表单应该是这样的
<form method = "POST" action="/wikicamp/page_name/save/">
% csrf_token %
<textarea name = "content" rows="20" cols="60">
content
</textarea>
<br/>
<input type="submit" value="Save Page"/>
</form>
@DanielRoseman 也是这么说的。但是,嘿,它可能会走得更远。
【讨论】:
感谢聚光灯,这是“form”的拼写错误。以上是关于表单动作在 django 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章