【发布时间】:2014-05-24 19:38:22
【问题描述】:
我正在尝试从 Django 1.3 升级到 Django 1.4。我被这个错误困住了:
Python 版本:2.7.3
Django 版本:1.4.10
异常类型:ValueError
异常值:需要超过 2 个值才能解压
触发该错误的行是(在模板 /var/www/proj/src_1.4/templates/fragments/header.html 中,第 20 行错误):
<a id="login" href="{% url login %}" rel="nofollow">{% trans "Login" %}</a>
它在 Django 1.3 中运行良好。
我尝试了以下方法:
python manage.py shell
>> from django.conf.urls import *
>> from django.core.urlresolvers import reverse
>> reverse('login')
然后出现这个错误:
ValueError Traceback (most recent call last)
/var/www/proj/env_1.4/local/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 reverse('login')
/var/www/proj/env_1.4/local/lib/python2.7/site-packages/django/core/urlresolvers.pyc in reverse(viewname, urlconf, args, kwargs, prefix, current_app)
474 resolver = get_ns_resolver(ns_pattern, resolver)
475
--> 476 return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
477
478 reverse_lazy = lazy(reverse, str)
/var/www/proj/env_1.4/local/lib/python2.7/site-packages/django/core/urlresolvers.pyc in _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs)
363 possibilities = self.reverse_dict.getlist(lookup_view)
364 prefix_norm, prefix_args = normalize(_prefix)[0]
--> 365 for possibility, pattern, defaults in possibilities:
366 for result, params in possibility:
367 if args:
ValueError: need more than 2 values to unpack
如果我在尝试加载项目时查看 Django 显示的信息,“Local vars”会显示该信息:
self <RegexURLResolver urls (None:None) ^/>
args ()
_prefix u'/'
possibilities [([(u'accounts/login/', [])], 'accounts/login/$')]
lookup_view u'login'
prefix_norm u'/'
prefix_args []
kwargs {}
proj/urls.py 中的代码
from django.conf.urls import *
urlpatterns += patterns('',
url(r'^', include('home.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^accounts', include('accounts.urls')),
apps/accounts/urls.py 中的代码
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^/register$',
'accounts.views.register',
name='register'),
url(r'^/login/$',
'django.contrib.auth.views.login',
{'template_name': 'accounts/login.html', 'authentication_form': AuthenticationForm},
name='login'),
对此我将不胜感激。谢谢。
最后我发现了错误。这是一个用于 URL 国际化的旧应用程序 (i18nurls)。 Django 1.3 使用外部应用程序,在 Django > 1.4 中,国际化已包含在核心中 (Django: Internationalization: in URL patterns)。
谢谢。
【问题讨论】:
-
当 python 期望显示更多值时,您会收到该错误,例如您有一个 print 语句:print("%s %s %s" % (var1, var2))。 Python 期望解压 3 个值,但只给出了两个
-
感谢@aldux 的信息。我知道,但我不知道为什么 django 不能正常工作。
-
由于一个简单的
reverse('login')设法触发问题,其原因很明显不是在您迄今为止发布的任何代码中。请发布您的urls.py模块。 -
我添加了新代码。谢谢。
标签: django