【问题标题】:Django form "takes exactly 1 argument (2 given) " error - possibly related to CSRF?Django 表单“只需要 1 个参数(给定 2 个)”错误 - 可能与 CSRF 有关?
【发布时间】:2011-08-07 01:52:29
【问题描述】:

我正在 Django 1.3 上尝试一个相当简单的表单,并试图了解 CSRF 的工作原理。

我想我已经关注了three steps detailed on the Django site,但仍然无法使表单工作。

在加载 URL 时显示表单,但是在点击提交按钮时,我收到以下错误:

/txt/ txt() 处的 TypeError 准确 1 个参数(给定 2 个)

这是实际代码:

views.py:

from django.http import HttpResponse
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext

def txt(request):
    if request.method == 'POST':
        msg="txt received"
    else:
        msg="nothing in POST"
    return render_to_response('base.html', locals(), context_instance=RequestContext(request))

HTML:

<body>

    <form action="txt/" method="POST">{% csrf_token %}
        From <input type="text" name="From"><br>
        To <input type="text" name="To"><br>
        Body <input type="text" name="Body"><br>
        <input type="submit" value="Search">
    </form>

    {{ msg }}

</body>

我知道我还没有完成 forms.py 等,但我只是想启动并运行基本功能。我认为这段代码可以在以前版本的 Django 中工作,但不确定为什么这次它不能工作。

【问题讨论】:

  • 你也可以添加网址吗?到目前为止没有任何问题......
  • 是的,urls.py 有问题 - 需要将 (r'^txt/(.*)$', txt) 替换为 (r'^txt/$', txt)

标签: django forms post csrf


【解决方案1】:

这个错误看起来你的视图函数得到的参数比它设置的要多。如上所示,视图只接受一个参数:请求。

如果您为此视图的 URL 模式配置了捕获组,或者您通过 optional dictionarykwargs parameter to url() 添加额外的参数,那么这些额外的参数将被提供给视图函数并可能导致错误你看到了。

【讨论】:

  • 啊... urls.py 中的菜鸟错误,正如您所料。需要将 (r'^txt/(.*)$', txt) 替换为 (r'^txt/$', txt) 谢谢!
猜你喜欢
  • 2010-11-11
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多