Django - 在新行中返回新表单输出而不覆盖以前的输出

时间:2018-04-07 18:24:33

标签: python html django

我一直在使用python和nltk开发一个机器人,它可以在命令行上运行。现在我想使用网页捕获输入,我将逻辑转移到Django。 我将使用一个更简单的例子来证明我遇到的问题。

在我的index.html中,我让用户在单个输入框中输入问题,点击发送后,视图只返回他们输入的内容:他们的问题'并且回答'在输入框下方。 问题是,当他们输入一个新问题时会覆盖前一个问题,但我希望新问题和答案显示在上一个问题的下方,如聊天帖子中所示。

如果你不理解我的意思,我会使用图像。

发生这种情况: when the user enters first chat message. 然后 when the user enters second chat message.

我想要的是: to have both of them as a thread and not two overwriting one

我刚刚开始在这个项目中使用Django,而使用cmd时我可以使用

while True:

我对如何使用Django中的视图和模板感到有些困惑。

这是我的index.html模板

<!DOCTYPE html>
<html>
    <head>
        <title>Tedbot</title>
    </head>
    <body>
        <div>
            <h1>Hello, I'm Tedbot</h1>
            <p>I'll help you join aBc University</p>
        </div>
        <div>
            <strong>{{ boldmessage }}</strong>
        </div>
        <div>
            <form name='form' action="{% url 'index' %}" method="POST"> {% csrf_token %}
                <input type="text" name="question"/>
                <input type="submit" name="send" value="send">
            </form>
        </div>

        <div>
            {{question}} <br />
            {{ answer }}
        </div>

    </body>
</html> 

我的forms.py

from django import forms

class ReturnAnswer(forms.Form):
    question = forms.CharField(max_length=200)

我的views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import nltk
import sklearn
from django.shortcuts import render
from django.http import HttpResponse
from tedbot.forms import ReturnAnswer

# Create your views here.
def index(request):
    answer = "Something"
    question = "Something else"
    if request.method == 'POST':
        myform = ReturnAnswer(request.POST)

        if myform.is_valid():
            question = myform.cleaned_data['question']
            answer = myform.cleaned_data['question']
    else:
        myform = ReturnAnswer()
    #context_dict = {'boldmessage': "Sum messages"}
    return render(request, 'tedbot/index.html', {"answer": answer, "question":question})

非常感谢任何指针。

1 个答案:

答案 0 :(得分:0)

当您点击一个视图时,您必须将您的问题和答案存储在数据库中,该视图会始终发送最后一个问题并回答模板。

然后当您的数据在数据库中时,您只需获取所有问题和答案并将其发送到模板并使用{%for%}显示