Django - For循环仅给出一项的结​​果

我有以下内容ListView:


class SongList(generic.ListView):

    model = models.Song

    template_name = 'videos/song_list.html'

    context_object_name = 'song_list'

我在哪里覆盖get_context_data:


    def get_context_data(self, **kwargs):

        context = super(generic.ListView, self).get_context_data(**kwargs)

现在我想对每首歌曲执行一些操作以便在我的模板上显示它,所以我这样做:


        for song in context['song_list']:

            song = models.Song.objects.get(title=song)

            lyrics_list = models.Song.objects.get(title=song).lyrics_as_list()

            

            import pymorphy2

            morph = pymorphy2.MorphAnalyzer()


            lyrics_list_lemma = []

            for word in set(lyrics_list):

                parsed_word = morph.parse(word)[0]

                result = {

                    'word_original': word,

                    'word_normalized': parsed_word.normal_form,

                        }

                lyrics_list_lemma.append(result)

            context['lyrics_lemma'] = lyrics_list_lemma

            context['count'] = len([k for d in lyrics_list_lemma for k in d.keys() if k == 'word_normalized'])

        return context

lyrics_list_lemma我获得了和的正确值count,但仅针对一首歌曲。我不应该为所有歌曲都得到它,因为它属于循环吗for?


大话西游666
浏览 78回答 1
1回答

哆啦的时光机

您正在覆盖每个循环的值。在循环外声明列表。前任:context['lyrics_lemma'] = []context['count'] = []for song in context['song_list']:    song = models.Song.objects.get(title=song)    lyrics_list = models.Song.objects.get(title=song).lyrics_as_list()        import pymorphy2    morph = pymorphy2.MorphAnalyzer()    lyrics_list_lemma = []    for word in set(lyrics_list):        parsed_word = morph.parse(word)[0]        result = {            'word_original': word,            'word_normalized': parsed_word.normal_form,                }        lyrics_list_lemma.append(result)    context['lyrics_lemma'].append(lyrics_list_lemma)    context['count'].append(len([k for d in lyrics_list_lemma for k in d.keys() if k == 'word_normalized']))return context你也可能需要一本字典或字典列表context['data'] = []for song in context['song_list']:    .....    context['data'].append({"lyrics_lemma": lyrics_list_lemma,                             "count": len([k for d in lyrics_list_lemma for k in d.keys() if k == 'word_normalized']))或者context['data'] = {}for song in context['song_list']:    .....    context['data'].update({song: {"lyrics_lemma": lyrics_list_lemma,                                    "count": len([k for d in lyrics_list_lemma for k in d.keys() if k == 'word_normalized'])}})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python