如何使用要在聊天机器人应用程序中实现的django模板在一个for循环中同时遍历两个列表



所以我正在尝试一个聊天机器人应用程序,用户会收到用户字符串响应,然后聊天机器人会抛出回复。这意味着它应该能够在一个for loop中遍历两个字符串列表user_responsechat_response。我遇到的问题是,我不知道如何在Django中实现它,这适合我实现它的方式。我应该这样实现它:

{% for chat in user_chat#<-not sure here %}
<div class="chat self animated slideInUp fast">
<div class="user-photo">
<img src="{% static 'images/account_200px.png'%}"alt="Self"></div>
<div class="chat-message">{{ user_chat }}
</div>
</div>
<div class="chat friend animated slideInUp fast">
<div class="user-photo">
<img src="{% static 'images/icon-at.png'%}"alt="Dog"></div>
<div class="chat-message">
{{ response #<-the response from system|safe}}
</div>
</div>
{% endfor %}

这意味着在循环的一个实例中,我应该能够呈现具有不同类的两个div,这些类显然具有来自两个不同字符串列表的不同消息。像

for loop{
render(user_chat)
render(system_response)
}

这反过来会产生这种反应假设:

user_chat = ["Hi", "I am okay", "good!"]
system_response = ["How are you", "How Okay are you?", "Oh that's great to hear"]

将制作

Hi
How are you
I am okay
How Okay are you?
good!
Oh! that's great to hear

我尝试过这个解决方案如何在django模板中为发送和接收聊天设置两个for循环?

然而,可能是由于我的限制,也可能是因为解决方案的实现方式不符合我正在做的程序的规范,我未能有效地完成它,只产生了以下内容:

Hi
Hi
I am okay
I am okay
good!
good!
How are you
How are you
How Okay are you?
How Okay are you?
Oh! that's great to hear
Oh! that's great to hear

我做错什么了吗?有人能告诉我解决办法吗?

这是我实现解决方案后的html

{% for chat in message %}
<div class="chat self animated slideInUp fast">
<div class="user-photo"><img src="{% static 'images/account_200px.png'%}"alt="Self"></div>
<div class="chat-message">{{ chat }}</div>
</div>
<div class="chat friend animated slideInUp fast">
<div class="user-photo"><img src="{% static 'images/icon-at.png'%}"alt="Dog"></div>
<div class="chat-message">{{ chat|safe}}</div>
</div>
{% endfor %}

这是我的看法。现在是

from django.shortcuts import render
import operator
from itertools import chain
# Create your views here.
def messenger_view(request):
chat = ["hi","ho","hey"]
response =  ["hille","hoe","hey0"]
message = chain(chat, response)
context = {
"lists":["hi","ho","hey"],
"message": message
}
return render(request, "chatbot/index.html",context)

谢谢!

如果您想创建两个列表的列表。你可以压缩和迭代它们:

a = [1,3,5,7,9,11]
b = [2,4,6,8,10]
c = []
for i, j in zip(a,b):
c.extend([i,j])
#to handle uneven number of responses
if len(a)>len(b): c.append(a[-1])
print(c)

输出:[1,2,3,4,5,6,7,8,9,10,11]

第S页:‌计算c的一种更干净的方法是嵌套列表理解,但我认为for循环对你来说更容易阅读:

c = [message for pair in zip(a,b) for message in pair]

最新更新