0

假设“mylist”可以包含值“video”、“audio”、“visual”或全部三个。如果在“mylist”中找到字符串,我希望我的脚本将匹配数据附加到列表“files”中,如果“mylist”中只有一个字符串,则此方法有效,但如果有多个字符串,则只有第一个字符串在“mylist”中得到匹配。有什么我可以使用的东西来代替等效于“and if”的“elif”吗?

 if request.method == 'POST':
    mylist = request.POST.getlist('list')
    files = []
    if 'video' in mylist:
      files.append('/home/dbs/public_html/download/codex/codex.html')
    elif 'audio' in mylist:
      files.append('/home/dbs/public_html/download/audio/audio_player.html')
    elif 'visual' in mylist:
      files.append('/home/dbs/public_html/download/visual/visual.html')
    return HttpResponse(files)
  else:
    return http.HttpResponseForbidden()
4

2 回答 2

10

只需使用if而不是elif.

if 'video' in mylist:
    files.append('/home/dbs/public_html/download/codex/codex.html')
if 'audio' in mylist:
    files.append('/home/dbs/public_html/download/audio/audio_player.html')
if 'visual' in mylist:
    files.append('/home/dbs/public_html/download/visual/visual.html')

您还可以使用映射对象和循环,以防有多个项目,因为您不必重复`... in mylist代码,这样会更好:

paths = {
    'video': '/home/dbs/public_html/download/codex/codex.html',
    'audio': '/home/dbs/public_html/download/audio/audio_player.html',
    'visual': '/home/dbs/public_html/download/visual/visual.html'
}

files += [path for key, path in paths.iteritems() if key in mylist]
于 2012-06-14T20:16:19.637 回答
5

为什么不只是如果?如果每种情况发生,您都需要它。每个子句之间没有关系。:)

于 2012-06-14T20:16:53.443 回答