Я хотел создать контактную форму Django на веб-сайте, и я нашел, что Django хрустящие формы очень полезны для этого, но оказалось, что я не могу смешивать его с Django FormView так же, как это. Хрустящие формы сделали потрясающую работу в интерфейсной макете, но я не могу захватить любую информацию из заполненной формы в мое приложение Django. Я пробовал этот учебник: Simple Django email form using CBV, но он устарел и совсем не помогает. Вот мой forms.py:Смешанные формы Django с FormView
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
class ContactForm(forms.Form):
name = forms.CharField(
label = "Name:",
max_length = 80,
required = True,
)
email = forms.CharField(
label = "E-mail:",
max_length = 80,
required = True,
)
subject = forms.CharField(
label = "Subject:",
max_length = 80,
required = True,
)
message = forms.CharField(
widget = forms.Textarea,
label = "Message:",
required = True,
)
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.add_input(Submit('send', 'Send'))
views.py:
from django.shortcuts import render
from myapp.forms import ContactForm
from django.core.mail import send_mail
from django.views.generic.edit import FormView
class ContactFormView(FormView):
form_class = ContactForm
template_name = "myapp/contact.html"
success_url = '/email_sent/'
def form_valid(self, form):
message = "{name}/{email} said: ".format(
name=form.cleaned_data.get('name'),
email=form.cleaned_data.get('email'))
message += "\n\n{0}".format(form.cleaned_data.get('message'))
send_mail(
subject=form.cleaned_data.get('subject').strip(),
message=message,
from_email='[email protected]',
recipient_list=['[email protected]'],
)
return super(ContactFormView, self).form_valid(form)
def contact(request):
contact_form = ContactFormView()
return render(request, 'myapp/contact.html', {'contact_form': contact_form})
и мой шаблон contact.html:
{% extends "layout.html" %}
{% load crispy_forms_tags %}
{% block title %}Contact{% endblock %}
{% block content %}
<h2><b>Contact</b></h2>
<div class="container">
<p>You can e-mail me at: <a href="mailto:[email protected]">[email protected]</a></p>
<br>
<p>Or simply fill the form below:</p>
<br>
{% crispy contact_form %}
</div>
{% endblock %}
Что я получаю:
Exception Type: TypeErrorException Value:
'ContactFormView' object is not iterable
Любые предложения по использованию хард-форм Django с Django F ormView?
Я не знаю джанго хрустящих форм, но почему вы не можете использовать de неисправности? Они, кажется, делают то, что вы пытаетесь сделать. – Paco
Я не пробовал формы django default, если честно. Crispy просты в реализации, и они используют bootstrap3, как и на моем сайте: D – Nhor
Вы можете адаптировать формы django для использования классов bootstrap 3 путем создания тега шаблона для добавления класса css в ваши шаблоны (это то, что я делаю) или изменить атрибуты для css непосредственно в классе формы. Но опять же, я никогда не использовал хрустящие формы, поэтому я не знаю, хороши они или нет. – Paco