我的Django视图提示只需一个参数,但给了两个,但实际上只有一个

1 投票
3 回答
3406 浏览
提问于 2025-04-16 23:42

我正在做一个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

撰写回答