Django 5.0, отображение флэш-сообщения в форме и сохранение вводимых значений
У меня есть форма отправки электронной почты с 3 полями ввода:
#forms.py
class ContactForm(forms.Form):
name = forms.CharField(
widget=forms.TextInput(attrs={"placeholder": "* Your name"})
)
email = forms.EmailField(
widget=forms.TextInput(attrs={"placeholder": "* Your email address"})
)
message = forms.CharField(
widget=forms.Textarea(attrs={"placeholder": "* Your message"})
)
Когда пользователь отправляет форму, под кнопкой отправки появляется флэш-сообщение, подтверждающее, что сообщение было отправлено.
#contact.html
<section id="form">
<form action="" method="post">
<h3>Send me an email</h3>
{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="Send">
{% if messages %}
{% for message in messages %}
<div
class="text-center alert alert-{{ message.tags }}"
>
{{ message|safe }}
</div>
{% endfor %}
{% endif %}
</form>
</section>
#views.py
class ContactPageView(SuccessMessageMixin, FormView):
form_class = ContactForm
template_name = "contact.html"
success_url = reverse_lazy('contact') # Return back to the page containing the form
success_message = "Your message has been sent. Thankyou."
def form_valid(self, form):
email = form.cleaned_data.get("email")
name = form.cleaned_data.get("name")
message = form.cleaned_data.get("message")
# Displays in console
full_message = f"""
Email received from <{name}> at <{email}>,
________________________
{message}
"""
send_mail(
subject="Email from client using website form",
message=full_message,
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=[settings.NOTIFY_EMAIL],
)
return super().form_valid(form)
Форма работает нормально, за исключением того, что я хотел бы, чтобы вводимые значения сохранялись после отправки формы и при этом отображалось флеш-сообщение.
Я попробовал включить функцию get_success_url ниже функции form_valid, надеясь, что значения будут отображаться обратно в форме, но я получаю следующую ошибку атрибутов:
'ContactPageView' object has no attribute 'name'
.
#views.py
def get_success_url(self):
return reverse(
'contact',
kwargs={
'name': self.name,
'email': self.email,
'message': self.message,
},
)
Я новичок в Django, поэтому не мог бы кто-нибудь указать мне правильное направление. Спасибо.