Django中for循环中的if语句在执行时消失

kkih6yb8  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(114)

我正在使用Django构建一个聊天机器人,它可以接受调查的预设答案选项,并对不同的答案选项给予给予不同的分数。之后,聊天机器人将相应地对所有分数进行求和,并打印出结果。
这是一个带有预设答案选项的示例问题

<select name="survey1-q" data-conv-question="Bạn có hay nghĩ về một điều sẽ xảy ra trong tương lai theo hướng tồi tệ, thậm chí rất tiêu cực?">
  <option value="survey1-never">Không bao giờ</option>
  <option value="survey1-rarely">Hiếm khi</option>                      
  <option value="survey1-sometimes">Đôi khi</option>                        
  <option value="survey1-often">Thường xuyên</option>
  <option value="survey1-veryoften">Rất thường xuyên</option>
</select>

字符串
这是for循环中的if语句

<!--looping and getting the survey's result-->
{% for i in survey1-q%}
  {% if survey1-q is "Không bao giờ"%}
    {{score}}={{score + 0}}
  {% elif survey1-q is "Hiếm khi" %}
    {{score}}={{score + 1}}
  {%elif survey1-q is "Đôi khi"%}
    {{score}}={{score + 2}}
  {%elif survey1-q is "Thường xuyên"%}
    {{score}}={{score + 3}}
  {%elif survey1-q is "Rất thường xuyên"%}
    {{score}}={{score + 4}}
  {%endif%}
{% endfor %}
<p>Điểm của bạn là {{score}}</p>


然而,在调查的问题完成后,聊天机器人会自动加载回到开始阶段,并提出第一个问题,而不是打印{{score}}
在for循环和if语句中,我很抱歉我把变量都叫错了,但是经过研究,我还是不明白。请帮助我!谢谢!

iaqfqrcu

iaqfqrcu1#

HTML页面不能在页面刷新之间存储变量。Django模板语言使用变量,但当您的表单验证时,它们会重置,因此当页面从后端重新加载时。
逻辑应该在后端。您的表单应该将结果发送到后端(Django视图view.py),在那里可以计算,存储和/或在Python中检索分数。视图的输出可以将模板沿着呈现为模板变量。
所以,假设你的HTML select是HTML表单的一部分,它将输入作为名为survey_response的GET参数发送回来,你的Python视图view.py看起来像这样:

from django.shortcuts import render
from django.http import HttpResponse
 
def your_view(request) -> HttpResponse:
    if not score:
        score: int = 0
        survey_response: str = request.GET.get('survey_response')
    if survey_response == "Hiếm khi":
        score += 1
    elif survey_response == "Đôi khi":
        score += 2
    elif survey_response == "Thường xuyên":
        score += 3
    elif survey_response == "Rất thường xuyên":
        score += 4
    return render(
        request,
        "your_template.html",
        {"score": score},
    )

字符串
然后在模板的一侧(your_template.html),你不需要任何循环,也不需要任何逻辑,唯一的事情就是用<p>Điểm của bạn là {{score}}</p>渲染分数。

相关问题