HTML Чекбоксы снимают отметку после кнопки отправки

Я написал менеджер паролей с длиной и флажками для символов типа chars/digits и специальных символов типа !$&

Каждый раз, когда я нажимаю кнопку submit для генерации пароля, не отмеченные флажки снова отмечаются (потому что по умолчанию они должны быть отмечены), но как я могу сделать так, чтобы флажок был таким, каким он был до отправки формы. Я пробовал сделать это с помощью if-статьи в шаблоне, потому что я использую django, но это не помогает. Если у кого-то есть идея, как я могу достичь своего решения, пожалуйста, дайте мне знать. Спасибо за помощь

Вот мой код:

def view_passwordgenerator(request):
    alphabets_b = bool(request.GET.get('alphabets'))
    digits_b = bool(request.GET.get('digits'))
    special_characters_b = bool(request.GET.get('special_characters'))
    alphabets = string.ascii_letters*alphabets_b
    digits = string.digits*digits_b
    special_characters = "!@#$%^&*()"*special_characters_b
    characters = alphabets + digits + special_characters
    if 'length' in request.GET:
        length = int(request.GET.get('length'))
        password = ''
        for i in range(length):
            password+=random.choice(characters)    
        pyperclip.copy(password)
        pyperclip.paste()
        messages.info(request, 'The password was copied to your clipboard')
        username = request.user.username
        context = {'password': password, 'length': length, 'username': username}

        return render(request, 'home/passwordgenerator.html', context)
    username = request.user.username
    hs = {'username': username}
    return render(request, 'home/passwordgenerator.html', hs)

и мой шаблон:

                       <form method="get" action="{% url 'home:passwordgenerator' %}">
                           <div class="fake_input">

                           <p class="fake_input_text">{{ password }}</p>
                           </div>
                                   <span class="fake_input_l">Length:</span> <select class="fake_input_drop" name="length"> 
                                       <option value="8" {% if length == 8 %}selected{% endif %}>8</option>
                                       <option value="10" {% if length == 10 %}selected{% endif %}>10</option>
                                       <option value="12" {% if length == 12 %}selected{% endif %}>12</option>
                                       <option value="14" {% if length == 14 %}selected{% endif %}>14</option>
                                       <option value="16" {% if length == 16 %}selected{% endif %}>16</option>
                                       <option value="18" {% if length == 18 %}selected{% endif %}>18</option>
                                       <option value="20" {% if length == 20 %}selected{% endif %} >20</option>
                                   </select>
                                   <span class="fake_input_l"> Alphabet Letters: <input type="checkbox" name="alphabets" checked>
                                   Digits: <input type="checkbox" name="digits" checked>
                                   Special Characters: <input type="checkbox" name="special_characters" checked></span>
                                   <button type="submit" value="Generate Password" class="fake_input_button">Generate</button>     
                       </form>

Вы должны установить значения этих флажков в контексте и при возвращении на страницу проверять эти значения и на основе флага отмечать их как установленные или снятые, как показано ниже :-

def view_passwordgenerator(request):
    username = request.user.username
    alphabets_b = bool(request.GET.get('alphabets'))
    digits_b = bool(request.GET.get('digits'))
    special_characters_b = bool(request.GET.get('special_characters'))
    ...
    context = {'username': username}
    if 'length' in request.GET:
        ...
        ...
        context.update({'password': password, 'length': length, 'alphabets_b': alphabets_b, 'digits_b': digits_b, 'special_characters_b': special_characters_b})
    else:
        context.update({'alphabets_b': True, 'digits_b': True, 'special_characters_b': True})

    return render(request, 'home/passwordgenerator.html', context)

На вашей HTML странице вы должны проверить флаги, как показано ниже :-

<span class="fake_input_l"> 
    Alphabet Letters: <input type="checkbox" name="alphabets" {% if alphabets_b %}checked {% endif %} >
    Digits: <input type="checkbox" name="digits" {% if digits_b %}checked {% endif %}>
    Special Characters: <input type="checkbox" name="special_characters" {% if special_characters_b %}checked {% endif %}>
</span>
Вернуться на верх