Django错误'解包值过多'在objects.get(id)中

1 投票
1 回答
1310 浏览
提问于 2025-04-17 02:39

我有一个这样的链接 http://gagandeepdesk/2690/,我在urls.py文件中对这个链接进行过滤,并把2690作为参数传给一个函数。

我的urls.py过滤器看起来是这样的,

url(r'^(\d+)/', 'scango.scanner.views.download'),

而那个函数看起来是这样的,

def download(request, MediaId):
    media = Media.objects.get(id=int(MediaId))
    #print media
    return HttpResponse(FileIterWrapper(open(media.path)))

我在第

media = Media.objects.get(id=int(MediaId))

行遇到了“值太多,无法解包”的错误。

我还尝试过在没有请求对象的情况下单独运行这个函数,结果运行得很好。所以,我搞不清楚我哪里出错了。

环境:

Request Method: GET
Request URL: http://gagandeepdesk/2690/

Django Version: 1.3
Python Version: 2.7.1
Installed Applications:
['haystack',
 'scanner',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin']
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')

错误追踪:

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\gagasing\Desktop\ideas\scango\..\scango\scanner\views.py" in download
  21.   media = Media.objects.get(id=int(MediaId))
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in get
  343.         clone = self.filter(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in filter
  552.         return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
  570.             clone.query.add_q(Q(*args, **kwargs))
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in add_q
  1170.                             can_reuse=used_aliases, force_having=force_having)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in add_filter
  1013.         arg, value = filter_expr

Exception Type: ValueError at /2690/
Exception Value: too many values to unpack

1 个回答

4
 (r'^(?P<MediaId>\d+)/$', 'scango.scanner.views.download')

也许可以试试这个?

这是一个命名组的例子。

在Python的正则表达式中,命名组的写法是(?Ppattern),其中name是组的名字,pattern是你想要匹配的模式。

撰写回答