为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2023-04-25 16:57:51
我有以下内容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 contextlyrics_list_lemma我获得了和的正确值count,但仅针对一首歌曲。我不应该为所有歌曲都得到它,因为它属于循环吗for?
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您正在覆盖每个循环的值。在循环外声明列表。


前任:


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'])}})



查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信