"값이 너무 많아 압축을 풀 수 없습니다" 예외
저는 장고에서 프로젝트를 진행하고 있으며 사용자 프로필을 만들기 위해 사용자 모델을 확장하기 시작했습니다.
유감스럽게도 문제가 생겼습니다.사용자 프로필을 템플릿 안에 넣으려고 할 때마다 (user.get_template.lastIP
예를 들어, 다음 오류가 발생합니다.
환경: 요청 방법: GET요청 URL: http://localhost:8000/장고 버전: 1.1 파이썬 버전: 2.6.1 템플릿 오류: 템플릿 /path/to/base.tpl에서 라인 19의 오류렌더링하는 동안 예외가 발견됨: 값이 너무 많아 압축을 풀 수 없습니다. 19 : {{user.username}}({{user.get_profile.rep}}), 안녕하세요.어떻게 되가나요?로그아웃 예외 유형:/의 템플릿 구문 오류예외 값: 렌더링하는 동안 예외가 발견됨: 값이 너무 많아 압축을 풀 수 없습니다.
무슨 일이 일어나고 있는지, 내가 무엇을 잘못하고 있는지에 대한 아이디어가 있습니까?
이 예외는 태플의 압축을 풀려고 하지만 대상 변수의 수와 관련하여 태플의 값이 너무 많다는 것을 의미합니다.예: 이 작업은 1, 2, 3을 인쇄합니다.
def returnATupleWithThreeValues():
return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c
하지만 이것은 당신의 오류를 야기합니다.
def returnATupleWithThreeValues():
return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b
인상
Traceback (most recent call last):
File "c.py", line 3, in ?
a,b = returnATupleWithThreeValues()
ValueError: too many values to unpack
자, 여러분의 경우 왜 이런 일이 일어나는지는 잘 모르겠지만, 아마도 이 대답이 여러분을 올바른 방향으로 인도할 것입니다.
하나의 변수로 압축을 풀어 봅니다.
파이썬은 그것을 목록으로 처리할 것입니다.
그런 다음 목록에서 압축을 풉니다.
def returnATupleWithThreeValues():
return (1,2,3)
a = returnATupleWithThreeValues() # a is a list (1,2,3)
print a[0] # list[0] = 1
print a[1] # list[1] = 2
print a[2] # list[2] = 3
이 문제는 친숙해 보여서 제한된 양의 정보로 복제할 수 있는지 알아보려고 했습니다.
James Bennett의 블로그에서 빠른 검색 결과 사용자 프로파일을 사용하여 사용자 모델을 확장할 때 settings.py 의 일반적인 실수로 인해 장고가 이 오류를 발생시킬 수 있다는 항목이 발견되었습니다.
블로그 항목 인용하기
설정 값은 "appname.models.modelname"이 아니라 "appname.modelname"입니다.그 이유는 Django가 이것을 직접 가져오기 위해 사용하는 것이 아니라 앱 이름과 모델 이름만 원하는 내부 모델 로딩 기능을 사용하기 때문입니다.AUTH_PROFILE_MODULE 설정에서 "appname.models.modelname" 또는 "projectname.appname.models.modelname"과 같은 작업을 수행하려고 하면 Django가 "너무 많은 값을 풀 수 없음" 오류와 함께 폭발하므로 AUTH_PROFILE_MODULE 값에 "appname.modelname"을 입력했는지 확인하십시오.
OP가 트레이스백을 더 많이 복사했다면 아래와 같은 것을 볼 수 있을 것입니다. 제 AUTH_PROFILE_MODULE 설정에 "모델"을 추가하여 복제할 수 있었습니다.
TemplateSyntaxError at /
Caught an exception while rendering: too many values to unpack
Original Traceback (most recent call last):
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 71, in render_node
result = node.render(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 87, in render
output = force_unicode(self.filter_expression.resolve(context))
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 535, in resolve
obj = self.var.resolve(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 676, in resolve
value = self._resolve_lookup(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 711, in _resolve_lookup
current = current()
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/contrib/auth/models.py", line 291, in get_profile
app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
ValueError: too many values to unpack
제 생각에 이것은 장고가 여전히 작은 오류가 예상된 예외를 던지지 않을 때 혼란을 야기하는 경향이 있는 약간의 수입 마법을 가지고 있는 몇 안 되는 경우 중 하나입니다.
AUTH_PROFILE_MODULE에 대해 "appname.modelname" 형식이 아닌 다른 형식을 사용하면 "app_label, model_name = settings"라는 행이 어떻게 발생하는지 보여줍니다.AUTH_PROFILE_MODULE.split('.'): "너무 많은 값을 풀 수 없습니다." 오류를 발생시킵니다.
저는 이것이 여기서 발생한 최초의 문제라고 99% 확신합니다.
get_profile() 호출 어딘가에 오류가 있을 가능성이 높습니다.요청 개체를 반환하기 전에 다음 행을 입력하십시오.
request.user.get_profile()
오류를 발생시키고 더 자세한 추적 정보를 제공하여 추가 디버그에 사용할 수 있습니다.
제가 Jinja2를 템플릿으로 사용할 때 이런 일이 발생합니다.django_extensions 명령을 사용하여 개발 서버를 실행하면 문제를 해결할 수 있습니다.
그것은 werkzeug 디버거를 사용하는데, 이것은 또한 훨씬 더 낫고 매우 좋은 대화형 디버깅 콘솔을 가지고 있습니다.디버그할 수 있도록 호출 스택의 모든 프레임에서 파이썬 셸을 실행하는 것은 약간의 Ajax 마법을 수행합니다.
루프에서 액세스를 시도하는 동안 열거를 잊었습니다.
던지를 .ValueError: too many values to unpack (expected 2)
:
for index, value in your_list:
assert value is your_list[index] # this line not reached
예외가 발생하지 않음:
for index, value enumerate(in your_list):
assert value is your_list[index]
언급URL : https://stackoverflow.com/questions/1479776/too-many-values-to-unpack-exception
'IT' 카테고리의 다른 글
CTE를 사용하기 위해 MariaDB 10.2.20으로 업데이트했습니다.여전히 "인식할 수 없는 문 유형"을 받는 중입니다.(근처 WITH) in phpMyAdmin (0) | 2023.07.22 |
---|---|
표의 두 필드를 비교하고 상태 필드를 만드는 방법 (0) | 2023.07.22 |
내 배티스가 준비된 문을 닫지 않습니다. (0) | 2023.07.22 |
외부 "C"를 간단한 단어로 언제 사용합니까? (0) | 2023.07.22 |
배열에 특정 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.07.22 |