需要提取查询集中每个项目的第一个字母并将其传递给模板

时间:2017-04-08 00:47:23

标签: python django django-views

我正在传递变量" 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]
...

例如:如果我的主题条目为" Apple"," Banana" &安培; "黄瓜"它只会返回C而不是包含A,B和B的列表。下进行。

我希望有人可以指出我所缺少的简单事物。感谢。

1 个答案:

答案 0 :(得分: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,
    })