我的Django视图提示只需一个参数,但给了两个,但实际上只有一个
我正在做一个django项目,当我尝试运行这个函数时,它提示只能给一个参数,但我确实只给了一个参数。
from django.http import HttpResponse, Http404
from django.template import Context
from django.template.loader import get_template
from django.contrib.auth.models import User
def main_page(request):
template = get_template('main_page.html')
variables = Context({
'head_title':u'Bookmarks!',
'page_title':u'Welcome to bookmarks!',
'page_body': u'store and share the bookmarks',
})
output = template.render(variables)
return HttpResponse(output)
网址模式
from django.conf.urls.defaults import patterns, include, url
from socialnetwork.bookmarks.views import *
urlpatterns = patterns('',
(r'^user/(\w+)/$', main_page),
)
错误追踪信息:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/user/Colin/
Django Version: 1.3
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'socialnetwork.bookmarks']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /user/Colin/
Exception Value: main_page() takes exactly 1 argument (2 given)
3 个回答
0
你可能是通过网址传递了额外的参数。
1
在一个视图函数中,request总是第一个参数,其他你可能传递的参数会在它后面。如果你只传递了一个参数给这个视图函数:
def main_page(request, arg1):
code ...
10
我怀疑你的URL模式捕获了其他一些变量。如果你把一个URL模式绑定到一个视图上,并且这个URL模式捕获了某些值,那么你需要在这个视图中设置一个参数来接收每一个捕获的值,除此之外,请求参数总是第一个。所以,假设你有一个模式
(r'^mainpage(\d+)/$', myview)
myview()
需要这样定义:
def myview(request, digit):
# do something