我刚开始使用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>
答案 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)