表格行动不在django工作

时间:2013-04-15 12:23:36

标签: python django forms post submit

我有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相关的stackoverflow问题。现在,当我点击“保存页面”时,没有任何反应。按钮,没什么!甚至没有从表单发送任何请求(使用firebug跟踪HTTP请求和响应)

3 个答案:

答案 0 :(得分:3)

您的HTML中有一个拼写错误:from而不是form

您可能会意识到这一点,但该代码不会真正保存任何内容。我不确定你关注的是什么博客,但是你会更好地关注文档中的官方Django教程,然后阅读表单文档。

答案 1 :(得分:1)

您可能需要在表单中将method更改为"POST"

<from method = "get" action="/wikicamp/{{page_name}}/save/">

<form method = "post" action="/wikicamp/{{page_name}}/save/">

答案 2 :(得分:0)

有一些拼写错误,例如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所说的。但是,嘿,它可能会在未来发展。