Django Basics:动态URL给出了TypeError

时间:2013-06-26 08:26:37

标签: python django dynamic-url

我刚开始使用Django并且正在使用djangobook.com。我尝试了动态URL示例,但它给了我一个TypeError。你能看出什么是错的吗?

views.py

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def nameOffset(request, offset):
    print "in nameOffset"
    t = get_template('base.html')
    html = t.render(Context({'name':offset}))
    return HttpResponse(html)

urls.py

from django.conf.urls import patterns, include, url
from MemberInterface.views import getName, nameOffset

urlpatterns = patterns('', 
    (r'^name/$', getName ),
    (r'^name/plus/\d+/$', nameOffset ),
)

/ localhost / name /

一切都很好

但是当我去/ localhost / name / plus / 1 /时,我得到了

TypeError at /name/plus/1/

nameOffset() takes exactly 2 arguments (1 given)

Request Method:     GET Request URL:    /localhost/name/plus/1/ 
Django  Version:    1.5.1 Exception Type:   TypeError Exception Value:  

nameOffset() takes exactly 2 arguments (1 given)

“2个参数,一个给定的”是什么意思...这些请求和偏移是...并且不是内部通过get传递的请求?

修改

这是base.html

<html>
<title> Test Project </title>
<body>
Hello {{ name }}
</body>
</html>

2 个答案:

答案 0 :(得分:2)

谢谢大家的帮助。我想到了。如果其他人有同样的问题,请在此处发布

https://docs.djangoproject.com/en/dev/topics/http/urls/处的文档提到需要从网址捕获的任何内容都需要在括号中。 (我想djangobook的pdf需要更新)

因此,在urls.py中,该行应为

(r'^name/plus/(\d+)/$', nameOffset ),

而不是

(r'^name/plus/\d+/$', nameOffset ),

最后,它有效!

答案 1 :(得分:1)

您应该使用正则表达式保存命名组,以便将\d+部分网址捕获到offset变量中:

(r'^name/plus/(?P<offset>\d+)/$', nameOffset)

另见documentation