Отображение формы 'None' в производстве

Когда я использую сброс пароля в разработке, он работает нормально. Однако в продакшене после того, как пользователь открывает письмо сброса, форма сброса пароля не отображается, однако другие формы на сайте через crispy forms работают нормально. Ничего не было изменено в dev и production, кроме url в представлении. На сервере и в dev установлена одна и та же версия crispy forms.

Я сделал это, основываясь на этом учебнике и, кажется, я сделал все необходимые изменения для производства

При проверке адресов электронной почты между production и dev я не вижу проблемы

http://127.0.0.1:8000/reset/MQ/***hm*-e00d**b30b635b358be1573e********/
https://domain.co/reset/MQ/***ht*-71ff80c**580c6cecc3ffd44********/

Обновление:

Если я пытаюсь отобразить форму как {{ form }}, она отображается только None, что наводит меня на мысль, что контекст не передается и это не проблема crispy

view:

def password_reset_request(request):
    if request.method == "POST":
        password_reset_form = PasswordResetForm(request.POST)
        if password_reset_form.is_valid():
            data = password_reset_form.cleaned_data['email']
            associated_users = User.objects.filter(Q(email=data)|Q(username=data))
            if associated_users.exists():
                for user in associated_users:
                    subject = "Password Reset Requested"
                    plaintext = template.loader.get_template('users/password_reset_email.txt')
                    htmltemp = template.loader.get_template('users/password_reset_email.html')
                    c = { 
                    "email":user.email,
                    'domain':'domain.com',
                    'site_name': 'Website',
                    "uid": urlsafe_base64_encode(force_bytes(user.pk)),
                    "user": user,
                    'token': default_token_generator.make_token(user),
                    'protocol': 'https',
                    }
                    text_content = plaintext.render(c)
                    html_content = htmltemp.render(c)
                    try:
                        msg = EmailMultiAlternatives(subject, text_content, 'myemail@email.com', [user.email], headers = {'Reply-To': 'myemail@email.com'})
                        msg.attach_alternative(html_content, "text/html")
                        msg.send()
                    except BadHeaderError:
                        return HttpResponse('Invalid header found.')
                    return redirect ("password_reset_done")
    password_reset_form = PasswordResetForm()
    return render(request=request, template_name="users/password_reset.html", context={"password_reset_form":password_reset_form})

Шаблон:

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="loginout-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="login-register-btn" type="submit">Reset</button>
            </div>
        </form>
    </div>
{% endblock content %}

Урлы:

    from users import views as user_views
    path("reset_password/", user_views.password_reset_request, name="password_reset"),
    path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(template_name="users/password_reset_sent.html"), name="password_reset_done"),
    path('reset/<uidb64>/<token>/',auth_views.PasswordResetConfirmView.as_view(template_name="users/password_reset_form.html"), name="password_reset_confirm"),
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(template_name="users/password_reset_done.html"), name="password_reset_complete"),
Вернуться на верх