If-заявление в цикле for в Django исчезает при выполнении

Я создаю чат-бота на 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>

Это мой оператор if внутри цикла for

<!--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, но после исследования я так и не смог разобраться. Пожалуйста, помогите мне! Спасибо!

HTML-страница не может хранить переменную между обновлениями страницы. Язык шаблонов Django использует переменные, но они сбрасываются при валидации вашей формы и, следовательно, при перезагрузке страницы из бэкенда.

Логика должна быть на стороне бэкенда. Ваша форма должна отправлять результат в бэкенд (ваше представление Django view.py), где оценка может быть рассчитана, сохранена и/или получена в Python. Затем на выходе представления можно вывести шаблон вместе с оценкой в качестве переменной шаблона.

Итак, если предположить, что ваш HTML select является частью HTML-формы, отправляющей входные данные в виде GET-параметра с именем survey_response, то ваше представление view.py в Python будет выглядеть примерно так:

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>.

Вернуться на верх