Python - 如何在 django 模板中为所有值并排显示两个键的字典值

Posted

技术标签:

【中文标题】Python - 如何在 django 模板中为所有值并排显示两个键的字典值【英文标题】:Python - How to show dictionary values from two keys side by side in django template for all values 【发布时间】:2020-10-19 11:52:40 【问题描述】:

假设我的 django 视图中有以下字典:

dict_lyrics = 'question': ['word1', 'word2'], 'answer': ['word3', 'word4']

现在在我的模板中,我想将其显示为:

word1 - word3 word2 - word4

(它的顺序已经正确了。)

但我做不到。如何从一个键中获取第一个值,从第二个键中获取第一个值,依此类推?我已经无休止地用谷歌搜索了。

如果我这样迭代:

% for key, value in dict_lyrics.items %
    <tr>
        <td> Key:  key  </td>
        <td> Value:  value  </td>
    </tr>
% endfor %

...我从一个键中获取所有值,然后从另一个键中获取所有值。我怎样才能将它们并排显示,还是更换我的字典更好?

我的看法:

z = []
dict_lyrics = 'question': [], 'answer': []
for word in user_word:
    x = lyrics_list_clean.index(word)
    y = user_word.index(word)
    flash = Flashcard.objects.get(owner=self.request.user, question=word)
    z.append(flash.answer)
    dict_lyrics['question'].append(lyrics_list_clean[x])
    dict_lyrics['answer'].append(z[y])
    context['question'] = dict_lyrics['question']
    context['answer'] = dict_lyrics['answer']
    context['dict_lyrics'] = dict_lyrics

提前感谢您的任何建议/帮助。

【问题讨论】:

【参考方案1】:

据我了解您的问题以及 dict_lyrics 的进展情况,如果您想以这种形式显示问题 0 的答案 0 和问题 1 的答案 1:

word1 - word3
word2 - word4

你可以这样做:

answers = [v for subl in li.values() for v in subl]
frist_qa = answers[0::2]
second_qa = answers[1::2]
print(f"' '.join(first_qa)")
print(f"' '.join(second_qa)")

first_qa 持有 ['word1', 'word3']second_qa 持有 ['word2', 'word4']

以更一般的方式,例如,这个 dict_lyrics dict_lyrics = 'question': ['word1', 'word2', 'wordX'], 'answer': ['word3', 'word4', 'wordY']

并假设len(dict_lyrics["question"]) == len(dict_lyrics["answer"])

for i in range(len(li["question"])):
    print(f"li['question'][i] li['answer'][i]")

应该做的伎俩:

word1 word3
word2 word4
wordX wordY

编辑:评论后,我猜你正在寻找某种 html 输出。我会像这样更改您在问题中显示的循环:

% for i in range(len(li["question"])): %
    <tr>
        <td> Key:  li['question'][i]  </td>
        <td> Value:  li['answer'][i]  </td>
    </tr>
% endfor %

【讨论】:

谢谢!但是我将如何在我的模板中呈现它(而不是打印)? 我编辑了我的评论以显示某种 HTML 输出。这是你需要的吗?【参考方案2】:

将此添加到我的视图中:

context['combined'] = list(zip(dict_lyrics['question'], dict_lyrics['answer']))

然后在模板中使用这个:

% for i, j in combined %
     i  --  j 
% endfor %

解决了我的问题。

【讨论】:

以上是关于Python - 如何在 django 模板中为所有值并排显示两个键的字典值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中为循环创建唯一的 javascript 变量名?

如何在 Django settings.py 中为 CDN 设置 STATIC_URL

是否有任何工具可以自动在Django中为模型创建模板

如何在(Django GeoIP)中为每个国家/地区显示广告

使用 L10N 在 Django 模板中为一种语言指定日期格式

MEDIA_URL 在 Django 1.4 中为空