2017-04-08 20 views
1

我将变量“first_letter”传递给视图,并且希望将此字母与查询返回的每个项目的第一个字母进行比较。我不能达到我有一个列表比较,我只得到一个项目返回。需要提取查询集中每个项目的第一个字母并将其传递给模板

型号:

class Subjects(models.Model) 
    subject = models.CharField(max_length=75) 
    .... 

查看:

def subjects_by_letter(request, first_letter): 
    subject_list = Subjects.objects.all() 
    for item in subject_list: 
     letter = item.subject[0] 

     return render_to_response('/path/to/mytemplate.html', { 
      'subject_list': subject_list, 
      'first_letter': first_letter, 
      'letter': letter, 
     }) 

有了这个观点我所得到的是最后一条记录的仅在查询中的第一个字母:

... 
for item in subject_list: 
    letter = item.subject[0] 
... 

例如:如果我有“苹果”,“香蕉”科目条目&“黄瓜”,它将返回只是C instea d列表中包含A,B & C.

我希望有人能够指出我失踪的简单事情。谢谢。

回答

1

问题中的代码返回for循环。您需要在列表外部创建一个列表,并在循环内追加第一个字符。

或者使用list comprehension

def subjects_by_letter(request, first_letter): 
    subject_list = Subjects.objects.all() 
    letter = [item.subject[0] for item in subject_list] # <--- 
    return render_to_response('/path/to/mytemplate.html', { 
     'subject_list': subject_list, 
     'first_letter': first_letter, 
     'letter': letter, 
    }) 
+0

就像一个魅力。非常感谢。 – Fish

相关问题