我正在Django的一个项目中工作,我刚开始尝试扩展User模型以制作用户配置文件.
不幸的是,我遇到了一个问题:每次我尝试在模板中获取用户的配置文件时(user.get_template.lastIP例如),我都会收到以下错误:
Environment:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 1.1
Python Version: 2.6.1
Template error:
In template /path/to/base.tpl, error at line 19
Caught an exception while rendering: too many values to unpack
19 : Hello, {{user.username}} ({{ user.get_profile.rep}}). How's it goin? Logout
Exception Type: TemplateSyntaxError at /
Exception Value: Caught an exception while rendering: too many values to unpack
关于发生了什么或我做错了什么的想法?
Ste*_*ini 176
该异常意味着您正在尝试解包元组,但元组在目标变量数量方面的值太多.例如:这项工作,并打印1,然后是2,然后是3
def returnATupleWithThreeValues():
return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c
Run Code Online (Sandbox Code Playgroud)
但这会引发你的错误
def returnATupleWithThreeValues():
return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b
Run Code Online (Sandbox Code Playgroud)
加薪
Traceback (most recent call last):
File "c.py", line 3, in ?
a,b = returnATupleWithThreeValues()
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
现在,在你的情况下发生这种情况的原因,我不知道,但也许这个答案会指出你正确的方向.
Ahm*_*aik 17
尝试在一个变量中解压缩,
python将它作为列表处理,
然后从列表中解压缩
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
Run Code Online (Sandbox Code Playgroud)
这个问题看起来很熟悉,所以我想我会看看是否能从有限的信息中复制出来.
快速搜索在James Bennett的博客中找到了一个条目,其中提到当使用UserProfile扩展User模型时,settings.py中的常见错误会导致Django抛出此错误.
引用博客条目:
该设置的值不是"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设置中添加"models"来看到类似于我能够复制的那个.
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
Run Code Online (Sandbox Code Playgroud)
我认为这是Django仍然有一些导入魔法的少数情况之一,当一个小错误没有抛出预期的异常时,它会导致混淆.
您可以在回溯结尾看到我发布了如何使用AUTH_PROFILE_MODULE的"appname.modelname"形式之外的任何内容将导致"app_label,model_name = settings.AUTH_PROFILE_MODULE.split('.')"行抛出"打开太多值"错误.
我99%肯定这是这里遇到的原始问题.
| 归档时间: |
|
| 查看次数: |
333372 次 |
| 最近记录: |