【问题标题】:TypeError at /confirmemail/amlqctnhel/confirmemail() takes exactly 2 arguments (1 given), why?/confirmemail/amlqctnhel/confirmemail() 处的 TypeError 恰好需要 2 个参数(给定 1 个),为什么?
【发布时间】:2012-02-14 07:10:09
【问题描述】:

错误:

TypeError at /confirmemail/amlqctnhel/

confirmemail() takes exactly 2 arguments (1 given)

Request Method:     GET
Request URL:    http://127.0.0.1:8000/confirmemail/amlqctnhel/
Django Version:     1.3.1
Exception Type:     TypeError
Exception Value:    

confirmemail() takes exactly 2 arguments (1 given)

Exception Location:     /usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py in get_response, line 111
Python Executable:  /usr/bin/python
Python Version:     2.6.6
Python Path:    

['/home/user1/djangoblog',
 '/usr/lib/python2.6',
 '/usr/lib/python2.6/plat-linux2',
 '/usr/lib/python2.6/lib-tk',
 '/usr/lib/python2.6/lib-old',
 '/usr/lib/python2.6/lib-dynload',
 '/usr/local/lib/python2.6/dist-packages',
 '/usr/lib/python2.6/dist-packages',
 '/usr/lib/python2.6/dist-packages/gst-0.10',
 '/usr/lib/pymodules/python2.6',
 '/usr/lib/pymodules/python2.6/gtk-2.0']

urls.py:

url(r'^confirmemail/[a-zA-Z0-9]{10}/$', 'blog.views.confirmemail'),

views.py:

def confirmemail(request,token):

user = Users.objects.get(email_token = token)
return render_to_response('confirmemail.html', {'user': user}, context_instance=RequestContext(request))

如果有人可以帮助我修复它,我们将不胜感激。谢谢。

【问题讨论】:

    标签: python django django-views django-urls


    【解决方案1】:

    在 URLconf 中,您需要在正则表达式中使用捕获组来实现视图中的位置或关键字参数。如果您使用命名的捕获组,则使用关键字参数;否则,使用位置参数。

    这是您的url() 行的样子:

    url(r'^confirmemail/([a-zA-Z0-9]{10})/$', 'blog.views.confirmemail'),
    # or
    url(r'^confirmemail/(?P<token>[a-zA-Z0-9]{10})/$', 'blog.views.confirmemail'),
    

    第一种形式使用位置参数(位置参数按 URL 中的捕获组排序)。第二种形式使用关键字参数,在本例中为 token。第二种形式是更多字符,但也可以安全地防止参数重新排序。

    【讨论】:

    • 正确。你的 URL 正则表达式中需要一个捕获组(([stuff])(?P&lt;name&gt;[stuff])),否则 Django 将不知道如何填充你的视图参数。
    【解决方案2】:

    您没有在 url 中捕获模式,因此它没有为您的令牌参数传递值

    url(r'^confirmemail/([a-zA-Z0-9]{10})/$', 'blog.views.confirmemail'),
    

    请注意,我已将您的模式包装在捕获组中

    【讨论】:

    • 你错过了括号,这也是接受答案中显示的相同示例。
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多