字符串索引超出范围Python,Djang

2024-05-19 00:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django开发一个web应用程序。当我尝试在我的web表单上运行它时,我收到了“字符串索引超出范围”错误。但是,当我将一个字典硬编码到python测试文件中时,使用相同的值可以很好地工作。在

以下是我的Django观点:

def submitworkout(request):
    #workoutinfo = workout(request.GET)
    return render_to_response('home.html',{'infoprompt': workout(request.GET)},context_instance=RequestContext(request))

目标是:

^{pr2}$

现在这是我要通读的字典:

addworkout =    
 {u'repinputboxes': [u'5', u'3'], u'weightinputboxes': [u'195', u'170'], u'numsets': [u'1', u'1'], u'exercisename': [u'Squat', u'Power Clean']}

以下是Django在错误中显示的本地变量:

i=1 

numsetcounter =0

getallreps = 1

希望你们能帮我解决问题。提前谢谢!在

编辑:回溯

Environment:


Request Method: GET
Request URL: http://localhost:8000/submitworkout/?exercisename=Squat&numsets=1&weightinputboxes=195&repinputboxes=5&exercisename=Power+Clean&numsets=1&weightinputboxes=170&repinputboxes=3

Django Version: 1.3.1
Python Version: 2.7.0
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'authentication')
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 "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Chris\testdjango\fitness\views.py" in submitworkout
  34.     return render_to_response('home.html',{'infoprompt': workout(request.GET)},context_instance=RequestContext(request))
File "C:\Users\Chris\testdjango\fitness\tracking\models.py" in __init__
  15.             while numsetcounter < int(addworkout['numsets'][i]):   # u'numsets': [u'1', u'2']

Exception Type: IndexError at /submitworkout/
Exception Value: string index out of range

Tags: djangopygetresponserequestcontribmiddlewarefile
2条回答

这个错误意味着addworkout['numsets']实际上是一个长度小于i的字符串,因为addworkout['numsets'][i]引发了异常。鉴于您的输入dict在那里有一个列表,我认为是内部出了问题。您能否尝试在函数调用中调试addworkout的内容,以便确保它仍然包含您期望的内容?在

问题在于您使用request.GET中的QueryDict对象的方式。从请求的查询字符串初始化QueryDict。在GET请求中传递值列表的方式类似于baz=1&baz=2。当你通过一个键直接访问这个值,就像它是一个普通的dict一样,你只能得到最后一个被添加的值。在

使用getlist正确使用QueryDict:

exercises = addworkout.getlist('exercisename')
numsets = addworkout.getlist('numsets')

这将正确返回值列表。在

另一个选择是在将QueryDict传递到另一个方法之前将其转换为普通dict。这样,它将具有所有正常展开值:

^{pr2}$

这实际上是一个非常好的主意,因为这样你的训练方法就不必对QueryDict对象有特殊的了解。它可以像普通的dict一样处理它,然后可以被任何类似字典的数据结构使用,除了特定的视图相关情况。在

相关问题 更多 >

    热门问题